Back to questions
Junior — Middle
87
Можете объяснить различия между контейнерами std::vector и std::list в C++?
Answer from AI
sobes.tech AI
std::vector и std::list — это контейнеры из стандартной библиотеки C++, но они имеют разные характеристики:
-
std::vector:
- Хранит элементы в непрерывном блоке памяти.
- Быстрый доступ по индексу (O(1)).
- Добавление элементов в конец обычно быстрое (амортизированное O(1)), но вставка или удаление в середине медленные (O(n)), так как нужно сдвигать элементы.
- Лучше подходит для случаев, когда важен быстрый случайный доступ и добавление в конец.
-
std::list:
- Реализован как двусвязный список.
- Нет случайного доступа (нужно итерироваться, чтобы добраться до элемента).
- Вставка и удаление элементов в любом месте списка быстрые (O(1)), если есть итератор на позицию.
- Занимает больше памяти из-за хранения указателей.
Пример использования:
#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); // быстро вставляет перед вторым элементом
Выбор зависит от задачи: если нужен быстрый доступ по индексу — vector, если частые вставки/удаления в середине — list.