Conversation
Fixed the .gitignore file.
Deleted .sln file; Deleted .vcxproj.filters file.
Improved the hasConnection method in Maze.cpp; A program has been written to display a new maze and tree.
|
Определитесь, пожалуйста, что из этого мне смотреть. |
|
Я, честно говоря, затрудняюсь ответить. Я проходил ревью у Елены Александровны и она мне сказала, внести последнюю правку, после чего она могла бы принять у меня task 8 и task 9. Однако к тому моменту я уже выполнили и task 10, который по просьбе Елены Александровны поместил в отдельный pull |
|
Ну, я при просмотре 10го накидаю замечаний по всем трём, чует моё сердце... |
|
Елена Александровна мне сказала, что Вы будете проверять у меня 10 задание. |
|
Также Елена Александровна сказала, что сможет зачесть мне 8 и 9 задание, если Вы зачтете мне 10) |
|
Ок, гляжу. |
Toxin65
left a comment
There was a problem hiding this comment.
Исправьте то, что есть. Потом продолжим.
Извините, немного недочитал, надо уделить внимание всем, по возможности...
| #pragma once | ||
|
|
||
| class MCell { | ||
| private: |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| MCell::MCell() { | ||
| m_down = false; | ||
| m_right = false; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| m_right = false; | ||
| } | ||
|
|
||
| bool MCell::down() const { return m_down; } |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| @@ -0,0 +1,26 @@ | |||
| #pragma once | |||
| #include <vector> | |||
| using namespace std; | |||
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| private: | ||
| int m_i, m_j; | ||
| int m_distance; | ||
| MTreeNode* m_parent; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| void PrintTreeInfo(const MTreeNode* tree, const int& width, const int& height); | ||
| vector<int> GetRandCoordinates(const int& width, const int& height); | ||
|
|
||
| void PrintTreeInfo(const MTreeNode* tree, const int& width, const int& height) { |
There was a problem hiding this comment.
Ох, как плохо без комментариев.
Что делает эта функция? Зачем программист её написал?
There was a problem hiding this comment.
Функция для получения произвольных координат на границе рандомного лабиринта. Теперь этот комментарий прописал в коде
| vector<vector<string>> to_print(height); | ||
| for (auto& vctr : to_print) | ||
| vctr = vector<string>(width); | ||
| while (true) { |
| int i = tree->i(); | ||
| int j = tree->j(); | ||
| sum_weights += tree->distance(); | ||
| max_weight = tree->distance() > max_weight ? tree->distance() : max_weight; |
| } | ||
| for (auto& vctr : to_print) { | ||
| for (auto& str : vctr) | ||
| cout << setw(5) << str; |
There was a problem hiding this comment.
Тоже забыл это поправить перед отправкой! В setw() теперь передаю длину строки, полученной от вершины с максимальным весом + 1 (const int max_len = size(to_string(max_weight) ....setw(max_len) << str...)
| cout << setw(5) << str; | ||
| cout << endl; | ||
| } | ||
| int average_weight = sum_weights / (1. * width * height); |
Однострочные методы инициализированны в заголовочных файлах; Убрал из заголовочников
Одностроные методы проинициализированны в заголовочных файлах; В заголовочных больше не используются пространства имен; const есть везде, где можно; Исправлен нелепый метод searchNode; Добавлен метод поиска корня в дереве searchRoot; во всех заголовочниках сначала идет public-секция; При живом родителе у дочернего элемента distance правильный; Лишние ссылки при прохождении по векторам (и при int) убраны; Перед добавлением ребенка происходит проверка на его наличие к родителя; m_dict из класса Maze больще не член класса и он sctatic; добавлены assert при попытке получения клетки лабиринта и где-то еще; Добавлена проверка на соседство двух клеток для методов класса Maze; Теперь, если звязи не было метод removeConnection возвращает корректное значение; Вообще, кажется, все исправил, что было прописано Вами.
| @@ -0,0 +1,5 @@ | |||
| //#include "MCell.h" | |||
There was a problem hiding this comment.
Это можно было бы и остаивть. Тогда он откомпилится в отдельный объектный файл. А это неплохо!
| const MTreeNode* searchNode(const int i, const int j); | ||
| const MTreeNode* searchRoot(const MTreeNode* node); | ||
| private: | ||
| int m_i, m_j = 0; |
There was a problem hiding this comment.
Что-то тут копипастой запахло.
Где-то уже видел...
There was a problem hiding this comment.
Вы сказали, что бы я исправил былое безобразие. Вы мне вариантом предложили сделать отдельный метод для поиска корня, если я хочу не зависеть от передаваемого узла. Я так и поступил.
|
|
||
| MTreeNode::MTreeNode(MTreeNode* parent) { | ||
| m_parent = parent; | ||
| m_distance = parent == nullptr ? 0 : parent->m_distance + 1; |
There was a problem hiding this comment.
Можо не тернарным, а просто при наличии родителя у него спросить и +1...
| if (child->m_i == i && child->m_j == j) | ||
| return false; | ||
| m_children.push_back(new MTreeNode(this)); | ||
| m_children[m_children.size() - 1]->m_distance = this->m_distance + 1; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| } | ||
|
|
||
| MTreeNode* MTreeNode::hasChild(int i, int j) const{ | ||
| const int count = m_children.size(); |
| bool Maze::hasConnection(int i1, int j1, int i2, int j2) const { | ||
| if ((abs(i1 - i2) + abs(j1 - j2) != 1)) return false; | ||
| if (j2 < 0 || j2 >= m_width || i2 < 0 || i2 >= m_height) | ||
| return false; |
There was a problem hiding this comment.
Может вынести эти штучки отдельно. А то дублирование получается. Ниже то же самое написано...
| return m_field[ind1 * m_width + ind2].down(); | ||
| } | ||
| else | ||
| return false; |
There was a problem hiding this comment.
Тут вообще ассерт, такого быть то не должно в природе!
Ассерт -- хорошая проверка программиста, что он что-то накосячил...
| if (j2 < 0 || j2 >= m_width || i2 < 0 || i2 >= m_height) | ||
| return false; | ||
| int ind1 = min(i1, i2); | ||
| int ind2 = min(j1, j2); |
| if (j + 1 == m_width) | ||
| cout << endl; | ||
| } | ||
| } No newline at end of file |
| int sum_weights = 0; | ||
| int max_weight = 0; | ||
| queue<const MTreeNode*> nodes; | ||
| vector<vector<string>> to_print(height); |
There was a problem hiding this comment.
Да пусть будет...
Но предупреждение вы получили.
При приёме на работу я такую фигню не потерплю!!!
в конструкторе MTreeNode упразднил тернарный оператор; заменил индексацию для вектора в методе addChild на .back; убрал вычисление m_distance из addChild; убрал лишнее вычисление длинные вектора детей в hasChild; Вернул ссылку для итерирования по вектору в hasChild; Прописал несколько комментариев для serchNode, searchRoot; Убрал return nullptr у метода searchNode; Уменшил вложенность для большей читаемости кода у searchRoot; Исправил assert у метода cell класса Maze; Вынес в отделный метод checkConnection проверку на вшивость для всех связей; Добавил в метод checkConnecion проверку нереального случая; добавли нужные const; довил пустую строку в конце Maze.cpp.
Toxin65
left a comment
There was a problem hiding this comment.
Беды с памятью... Большие беды! Разберитесь с new delete..
| return nullptr; | ||
| } | ||
|
|
||
| const MTreeNode* MTreeNode::searchNode(const int i, const int j) { |
There was a problem hiding this comment.
Доки надо в заголовках. Ну да ладно... На будущее...
Ну и кодировка похерилась...
| #include <iostream> | ||
| #include <queue> | ||
| #include "MTreeNode.h" | ||
| using namespace std; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| MTreeNode::~MTreeNode() { | ||
| for (auto ptr : m_children) | ||
| delete ptr; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Речь о том, что я мог просто вызвать delete[] ? Или я оставляю в памяти висеть детей того родителя, у которого вызывается деструктор?
There was a problem hiding this comment.
Сорян, всё норм. Я уже обревьювился в конец...
| using namespace std; | ||
|
|
||
| MTreeNode* MTreeNode::begintTree(int i, int j) { | ||
| MTreeNode* node = new MTreeNode(nullptr); |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Тут утечка, верно? Кстати говоря, я вызывал delete для корня дерева в practise_18.11.20.cpp в случае построения второго лабиринта (про третий благополучно забыл). Но я догадываюсь, что это не есть хорошо. Можете намекнуть на пример корректного поведения для beginTree?
| const MTreeNode* child(int i) const { return m_children[i]; } | ||
| static MTreeNode* begintTree(int i, int j); | ||
| const MTreeNode* searchNode(const int i, const int j); | ||
| const MTreeNode* searchRoot(const MTreeNode* node); |
| #include "MTreeNode.h" | ||
| using namespace std; | ||
|
|
||
| MTreeNode* MTreeNode::begintTree(int i, int j) { |
There was a problem hiding this comment.
Ну ё-маё... А я его ищу. beginTree!!! А не begint...
|
|
||
| MTreeNode::~MTreeNode() { | ||
| for (auto ptr : m_children) | ||
| delete ptr; |
There was a problem hiding this comment.
Сорян, всё норм. Я уже обревьювился в конец...
| } | ||
|
|
||
| MTreeNode* MTreeNode::hasChild(int i, int j) const{ | ||
| for (auto &child : m_children){ |
There was a problem hiding this comment.
Нет смысла ссылку делать. Получается ссылка на указатель -- это тут лишнее...
| int main() | ||
| { | ||
| const int maze_size = 5; | ||
| Maze maze1 = Maze(maze_size, maze_size); |
Конечно же исправил beginTree))); убрал ссылку в hasChild; Теперь корректно создаю экземпляры класса Maze.
No description provided.