Назад к вопросам
Samsung Research Center
Junior — Middle
80
Чем отличаются контейнеры std::list и std::vector в C++ по характеристикам и применению?
Компании, где спрашивали
Renga Software
ГК Адепт
Ответ от нейросети
sobes.tech AI
std::vector и std::list — это контейнеры из стандартной библиотеки C++, но они отличаются по структуре и характеристикам:
-
std::vector — динамический массив. Элементы хранятся в непрерывной области памяти, что обеспечивает быстрый доступ по индексу (операция за O(1)). Добавление элементов в конец обычно эффективно, но вставка или удаление в середине требует сдвига элементов (O(n)).
-
std::list — двусвязный список. Элементы хранятся в отдельных узлах, связанных указателями. Доступ по индексу медленный (O(n)), но вставка и удаление в любом месте списка выполняются быстро (O(1)), если есть итератор на нужный элемент.
Применение:
- Используйте
std::vector, когда важен быстрый случайный доступ и добавление в конец. - Используйте
std::list, если часто нужно вставлять или удалять элементы в середине коллекции и порядок элементов важен.
Пример:
#include <vector>
#include <list>
std::vector<int> v = {1, 2, 3};
v.push_back(4); // быстро добавляет в конец
std::list<int> l = {1, 2, 3};
auto it = l.begin();
std::advance(it, 1);
l.insert(it, 10); // быстро вставляет перед вторым элементом