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

Можете объяснить различия между контейнерами std::vector и std::list в C++?

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

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.