суббота, 16 марта 2019 г.

STL в быстро меняющемся C++

Современное программирование на C++, как я понимаю - это интенсивное использование стандартной библиотеки. А STL - это часть этой самой стандартной библиотеки.

Контейнеры хороши тем, что с ними работать безопаснее, чем с указателями. А что там с эффективностью? Статья Do not waste time with STL vectors наглядно показывает, что push_back у vector - это весьма медленная операция (быстрее всего заполнять vector с помощью [] - как обычный массив). А вот инициализация вида
vector< int > v = {10, 23} 
появилась только в C++11.

Кстати, чтоб push_back работал побыстрее, можно перед заполнением зарезервировать память (reserve()). Но если при этом еще и в конструкторе вектора указать длину - программа повиснет...

Зато есть возможность проверки выхода за границу - используя at() вместо operator[] (как подсказывают здесь). Если происходит выход за диапазон - кидается исключение std::out_of_range (описано в < stdexcept >)

А в 17м C++ уже объявили std::iterator устаревшим. Подробнее - std::iterator is deprecated: Why, What It Was, and What to Use Instead

Вот так все быстро меняется...

Комментариев нет: