Sobes.tech
Назад к вопросам
Junior — Middle
80

Чем отличаются контейнеры std::list и std::vector в C++ по характеристикам и применению?

Компании, где спрашивали
Renga Software
Samsung Research CenterSamsung Research Center
ГК Адепт

Ответ от нейросети

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); // быстро вставляет перед вторым элементом