Что выведет код Middle Контейнеры STL изнутри обновлено
Что выведет: remove, erase и multiset
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <algorithm>
#include <iostream>
#include <set>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3, 2, 4, 2};
auto it = std::remove(v.begin(), v.end(), 2);
std::cout << v.size() << ' ' << (it - v.begin()) << '\n';
v.erase(it, v.end());
for (int x : v) std::cout << x;
std::cout << '\n';
std::erase(v, 3);
std::cout << v.size() << '\n';
std::multiset<int> s{5, 5, 5, 7};
s.erase(5);
std::cout << s.size() << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 6 3, 134, 2, 1. std::remove не меняет размер: он сдвигает оставшиеся элементы к началу и возвращает новый логический конец, поэтому размер 6, а оставшихся 3. erase отрезает хвост: 134. std::erase (C++20) удаляет тройку: размер 2. multiset::erase(5)…
Что выведет
6 3
134
2
1
Разбор
std::remove не меняет размер: он сдвигает оставшиеся элементы к началу и возвращает новый логический конец, поэтому размер 6, а оставшихся 3. erase отрезает хвост: 134. std::erase (C++20) удаляет тройку: размер 2. multiset::erase(5) удаляет все пятёрки, остаётся один элемент.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.