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

Итераторы и алгоритмы STL

Тест проверяет способность читать обобщённый код: какие операции поддерживает итератор, какой диапазон реально передан алгоритму, сохраняется ли предикат чистым и не был ли итератор инвалидирован изменением контейнера.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, время — 55 минут. Во многих заданиях недостаточно узнать конструкцию: проследите порядок вычислений, время жизни объектов, владение ресурсами и условия, при которых решение остаётся корректным. После завершения откроются правильные ответы, объяснения, общий результат и тематические шкалы.
Вопрос 1 из 20
Какой минимум требуется алгоритму `std::sort`?
C++C++20
std::vector<int> values{4, 1, 3, 2};
std::sort(values.begin(), values.end());
// sort использует разность и произвольное смещение итераторов
Вопрос 2 из 20
Почему `std::distance` для list может быть O(n), а для vector O(1)?
C++C++20
std::list<int> linked(1'000'000, 1);
std::vector<int> contiguous(1'000'000, 1);

auto n1 = std::distance(linked.begin(), linked.end());
auto n2 = std::distance(contiguous.begin(), contiguous.end());
Вопрос 3 из 20
Какая операция недоступна для forward-итератора?
C++C++20
std::forward_list<int> values{1, 2, 3, 4};
auto it = values.begin();

++it;               // допустимо
// --it;            // требуется двунаправленный итератор
// it += 2;         // требуется random access
Вопрос 4 из 20
Какой пример является contiguous-итератором?
Вопрос 5 из 20
Почему input-итератор нельзя бездумно проходить дважды?
Вопрос 6 из 20
Почему стандартные алгоритмы используют диапазон [first, last)?
Вопрос 7 из 20
Что делает `std::remove(v.begin(), v.end(), 0)`?
C++C++20
std::vector<int> values{0, 1, 0, 2};
auto logical_end = std::remove(values.begin(), values.end(), 0);

std::cout << std::distance(values.begin(), logical_end)
          << ' ' << values.size();
Вопрос 8 из 20
Какой результат будет в out?
C++C++20
#include <algorithm>
#include <vector>
std::vector<int> in{1,2,3};
std::vector<int> out(3);
std::transform(in.begin(), in.end(), out.begin(), [](int x){ return x*x; });
Вопрос 9 из 20
Какой начальный аккумулятор нужен, чтобы `std::accumulate` не обрезал дробную сумму?
C++C++20
std::vector<double> values{0.1, 0.2, 0.3};

auto truncated = std::accumulate(values.begin(), values.end(), 0);
auto precise   = std::accumulate(values.begin(), values.end(), 0.0);
Вопрос 10 из 20
Какой алгоритм яснее ручного цикла для проверки “все числа положительны”?
C++C++20
std::vector<int> values{3, 5, 8, 13};

bool all_positive = std::ranges::all_of(values, [](int x) {
    return x > 0;
});
Вопрос 11 из 20
Почему компаратор `return a <= b;` неверен для std::sort?
C++C++20
std::vector<int> values{2, 1, 1};

std::sort(values.begin(), values.end(), [](int a, int b) {
    return a <= b;
});
Вопрос 12 из 20
Может ли предикат, переданный в std::find_if, изменять проверяемый элемент через свой параметр?
Вопрос 13 из 20
Что найдёт выражение?
C++C++20
int limit = 3;
auto it = std::find_if(v.begin(), v.end(), [limit](int x){ return x > limit; });
Вопрос 14 из 20
Какой риск у компаратора, зависящего от изменяемой глобальной переменной?
Вопрос 15 из 20
Какой захват нужен, если лямбда должна увеличивать внешний счётчик?
C++C++20
int count = 0;
std::vector<int> values{1, -2, 3, -4};

std::ranges::for_each(values, [&count](int x) {
    if (x < 0) ++count;
});
Вопрос 16 из 20
Как безопасно удалять элементы vector по условию во время прохода?
Вопрос 17 из 20
Что инвалидирует vector::push_back, если операция приводит к перераспределению буфера?
Вопрос 18 из 20
Инвалидирует ли вставка в std::map существующие итераторы?
Вопрос 19 из 20
Что может инвалидировать итераторы unordered_map?
Вопрос 20 из 20
Почему этот цикл ошибочен?
C++C++20
for (auto it = v.begin(); it != v.end(); ++it) {
    if (*it == 0) v.erase(it);
}

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

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

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

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