0. У меня на днях встретилась абсолютно простая задача (прям как на собесе, а вы говорите, что не нужны эти алгоритмы в жизни): в векторе чисел переместить все нули в конец. Недолго думая я делаю
std::remove(vec.begin(), vec.end(), 0);
И для примера
vec = {1, 4, 0, 2, 0, 0}
получаю
{1, 4, 2, 2, 0, 0}
Где-то есть баг.
Очевидно, что баг был в моей интерпретации алгоритма. Вот как выглядит стандартное использование
std::remove до C++20:
vec.erase(std::remove(vec.begin(), vec.end(), 0), v.end());
В голове я строю последовательность происходящего:
- все нули ушли в конец
- получаю итератор на первый нуль
- удаляю все нули.
И в первом пункте уже ошибка. Ведь нули не ушли в конец. Наоборот, в начало ушли все не нули. Что там в конце, меня
То есть мы имеем на текущий C++20-й момент:
- удаляем элементы мы с
std::erase/std::erase_if- если я хочу все нули в конец, то мне нужен
std::partition-
std::remove/std::remove_if нужен только ради обратной совместимости, т.к. никакой уникальной задачи он уже не решает. Жаль братка. 1. [talk] Как развивалось прогнозирование в Яндекс Погоде.
Коллега год назад рассказывал про то, как в Погоде предсказывают, неожиданно, погоду. Не то чтобы сложный технически доклад, но интересный с точки зрения незнакомого продукта и базовых деталей.
2. [article] Accelerating LinkedIn’s My Network tab by reducing latency and improving UX.
Суть статьи в названии.
У нас есть какая-то похожая задача, потому было интересно почитать. Жаль только, что они всё же различаются достаточно, чтобы не суметь перенять подход.
3. [article] Your business value.
Очень хорошая статья, которая в каждом предложении напоминает про то, зачем профессия программиста существует. Она, так сказать, постоянно cycle on a subject о вашей личной полезности для бизнеса и разбирает кейсы роста/увольнений в зависимости от разных факторов.
Будьте профитными.