C++ C++  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Стандартные контейнеры

Тест учит выбирать контейнер по реальному профилю операций, а не по привычке. Вопросы сопоставляют стоимость вставки, локальность данных, стабильность адресов, семантику ключей и поведение при перераспределении.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, время — 55 минут. Во многих заданиях недостаточно узнать конструкцию: проследите порядок вычислений, время жизни объектов, владение ресурсами и условия, при которых решение остаётся корректным. После завершения откроются правильные ответы, объяснения, общий результат и тематические шкалы.
Вопрос 1 из 20
Что гарантирует std::vector о размещении элементов?
C++C++20
std::vector<int> values{10, 20, 30};
int* first = values.data();
static_assert(std::contiguous_iterator<decltype(values.begin())>);
Вопрос 2 из 20
Чем reserve(100) отличается от resize(100)?
C++C++20
std::vector<Record> rows;
rows.reserve(100);   // size остаётся 0
rows.resize(100);    // создаются 100 элементов
Вопрос 3 из 20
Что стандарт C++ гарантирует после вызова `v.reserve(10)`?
C++C++20
#include <vector>

std::vector<int> v{1, 2, 3};
v.reserve(10);
Вопрос 4 из 20
Почему вставка в середину vector может быть дорогой?
C++C++20
std::vector<Large> items = load();
auto pos = items.begin() + items.size() / 2;
items.insert(pos, Large{/*...*/});
Вопрос 5 из 20
Как лучше заполнить vector заранее известным числом элементов через push_back?
Вопрос 6 из 20
В какой задаче deque естественнее vector?
Вопрос 7 из 20
Можно ли рассчитывать, что `&d[0] + 1 == &d[1]` для deque?
C++C++20
std::deque<int> values{1,2,3};

int* first = &values[0];
int* second = &values[1];

bool adjacent_as_array = (first + 1 == second);
Вопрос 8 из 20
Какова сложность добавления элемента в начало std::deque через push_front?
Вопрос 9 из 20
Какой контейнер удобен для очереди задач, если нужны pop_front и push_back?
Вопрос 10 из 20
Какое утверждение о `std::queue` верно?
C++C++20
std::queue<Task> tasks;
tasks.push(load_task());

Task next = std::move(tasks.front());
tasks.pop();
// Произвольного доступа и обхода итераторами адаптер не предоставляет.
Вопрос 11 из 20
Какое преимущество std::list действительно гарантирует?
Вопрос 12 из 20
Почему list часто медленнее vector при простом последовательном обходе?
Вопрос 13 из 20
Что делает `a.splice(a.end(), b, b.begin())`?
C++C++20
#include <list>
std::list<int> a{1,2};
std::list<int> b{3,4};
a.splice(a.end(), b, b.begin());
Вопрос 14 из 20
Какой итератор инвалидируется при `list.erase(it)`?
C++C++20
std::list<int> values{1,2,3,4};
auto first = values.begin();
auto erased = std::next(first, 2);
auto last = std::prev(values.end());

values.erase(erased);
std::cout << *first << ' ' << *last;
Вопрос 15 из 20
Когда vector может оказаться быстрее list даже при многочисленных вставках в середину?
Вопрос 16 из 20
Главное различие map и unordered_map?
Вопрос 17 из 20
Что делает `m[key]`, если key отсутствует в std::map?
C++C++20
std::map<std::string, int> counts;

int& value = counts["errors"];
value += 1;

std::cout << counts.size() << ' ' << counts.at("errors");
Вопрос 18 из 20
Как проверить наличие ключа без случайной вставки?
C++C++20
std::map<std::string, Config> configs;

if (configs.contains("prod")) use(configs.at("prod"));
if (auto it = configs.find("test"); it != configs.end()) use(it->second);
// Ни contains, ни find не вставляют отсутствующий ключ.
Вопрос 19 из 20
Почему плохая хеш-функция опасна для unordered_map?
Вопрос 20 из 20
Какой контейнер удобнее для запроса “первый ключ не меньше x”?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу