Назад к вопросам
Junior
116
questionbank
Какие контейнеры в C++ позволяют добавлять элементы в начало?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
std::list и std::deque.
std::list:
- Двусвязный список.
- Добавление в начало (
push_front) и конец (push_back) за константное время O(1). - Вставка и удаление элементов в любом месте также за константное время (при наличии итератора на нужный элемент).
- Не обеспечивает произвольный доступ по индексу O(1).
- Больше накладные расходы на хранение по сравнению с
std::vector.
std::deque:
- Двусторонняя очередь.
- Позволяет быстро (за константное время O(1)) добавлять и удалять элементы как в начале (
push_front,pop_front), так и в конце (push_back,pop_back). - Обеспечивает произвольный доступ по индексу за константное время O(1).
- Внутренне реализован как набор блоков, что может привести к фрагментации памяти и медленному доступу по индексу по сравнению с
std::vector(хотя асимптотика такая же).
Пример использования push_front:
#include <list>
#include <deque>
#include <iostream>
int main() {
// Использование std::list
std::list<int> my_list;
my_list.push_front(20);
my_list.push_front(10);
// list: 10, 20
// Использование std::deque
std::deque<int> my_deque;
my_deque.push_front(20);
my_deque.push_front(10);
// deque: 10, 20
std::cout << "List elements: ";
for (int val : my_list) {
std::cout << val << " ";
}
std::cout << std::endl;
std::cout << "Deque elements: ";
for (int val : my_deque) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}