В целом по коду - понравилось читать. Довольно ясный код, адекватные названия переменных, внятные алиасы. Очень хорошо.
Есть тесты. есть проверка с stdout, это плюс. Для более читабельного вида эту строку
https://github.com/OlegWorld/ip_filter/blob/master/filter_tests.cpp#L110
можно было бы разбить на запись вида:
"192.168.0.1\n"
"192.165.6.4\n"
Кажется так гораздо удобнее читать, особенно находить опечатки. Но по самим тестам все ок.
В этой строке происходит три операции. Опять же для сохранения читабельности кода, можно было бы разбить, например, на две операции. Хотя строка не очень длинная, но приходить вникать в последовательность действий. Not critical.
https://github.com/OlegWorld/ip_filter/blob/master/ip_filter.cpp#L17
Выброс исключения ок, но само условие выглядит довольно необычно, так как выбрасывается только на третьем шаге цикла. Плюс опираться на сравнение std::string::npos с std::string::npos + 1, которое хранится в переменной start на последнем шаге цикла как-то довольно костыльно)
https://github.com/OlegWorld/ip_filter/blob/master/ip_filter.cpp#L21
В целом логика солбюдена, но не хватает линейности что ли...
Что касается в принципе логики вывода фильтрованных ip, то кажется, что это скорее бы хотелось сделать in-place, а не создавать для этого отдельные структуры, которые хранят фильтрованные данные. Допустим, нам бы хотелось это исполнять в 8 потоков и размер исходного вектора был бы несколько сотен метров. Тогда потребление по памяти для параллельной фильтрации съело бы несколько гигов оперативки, в худшем случае еще 8 таких векторов.
Это вообще не кейс данной задачи, но в принципе про in-place остается актуально, тем более, что из твоего ревью я и сам заметил, что, забыв передать по ссылке, я вообще не пожалел нисколько памяти для программы)
Общие замечания:
В целом, когда начинаешь читать чей-то код, сразу бросается в глаза какие-то вещи, которые могут остаться незамеченными в своем же коде. Названия переменных, декомпозиция сложных операций... И именно на это я обратил внимание. Но по своей сути, мне понравился код кроме одного места с условием выброса исключения.
Так держать! Возможно еще, будет возможность провести ревью на каком-то из следующих домашних заданий.
В целом по коду - понравилось читать. Довольно ясный код, адекватные названия переменных, внятные алиасы. Очень хорошо.
Есть тесты. есть проверка с stdout, это плюс. Для более читабельного вида эту строку https://github.com/OlegWorld/ip_filter/blob/master/filter_tests.cpp#L110 можно было бы разбить на запись вида: "192.168.0.1\n" "192.165.6.4\n" Кажется так гораздо удобнее читать, особенно находить опечатки. Но по самим тестам все ок.
В этой строке происходит три операции. Опять же для сохранения читабельности кода, можно было бы разбить, например, на две операции. Хотя строка не очень длинная, но приходить вникать в последовательность действий. Not critical. https://github.com/OlegWorld/ip_filter/blob/master/ip_filter.cpp#L17
Выброс исключения ок, но само условие выглядит довольно необычно, так как выбрасывается только на третьем шаге цикла. Плюс опираться на сравнение std::string::npos с std::string::npos + 1, которое хранится в переменной start на последнем шаге цикла как-то довольно костыльно) https://github.com/OlegWorld/ip_filter/blob/master/ip_filter.cpp#L21 В целом логика солбюдена, но не хватает линейности что ли...
Что касается в принципе логики вывода фильтрованных ip, то кажется, что это скорее бы хотелось сделать in-place, а не создавать для этого отдельные структуры, которые хранят фильтрованные данные. Допустим, нам бы хотелось это исполнять в 8 потоков и размер исходного вектора был бы несколько сотен метров. Тогда потребление по памяти для параллельной фильтрации съело бы несколько гигов оперативки, в худшем случае еще 8 таких векторов. Это вообще не кейс данной задачи, но в принципе про in-place остается актуально, тем более, что из твоего ревью я и сам заметил, что, забыв передать по ссылке, я вообще не пожалел нисколько памяти для программы)
Общие замечания: В целом, когда начинаешь читать чей-то код, сразу бросается в глаза какие-то вещи, которые могут остаться незамеченными в своем же коде. Названия переменных, декомпозиция сложных операций... И именно на это я обратил внимание. Но по своей сути, мне понравился код кроме одного места с условием выброса исключения. Так держать! Возможно еще, будет возможность провести ревью на каком-то из следующих домашних заданий.