Выбор ответа Middle Контейнеры STL изнутри обновлено
multiset::erase(value)
Вопрос
В std::multiset<int> s{5, 5, 5, 7} нужно удалить одну пятёрку. Что сделает s.erase(5)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Удалит все три пятёрки; для одной нужен erase(find(5)). Перегрузка erase(const keytype&) удаляет все элементы с таким ключом и возвращает их число.
Варианты ответа
- Удалит одну пятёрку, первую по порядку обхода
- Удалит все три пятёрки; для одной нужен
erase(find(5))правильный ответ - Удалит элемент с индексом 5, которого нет, и ничего не сделает
- Не скомпилируется: у
multisetнетeraseпо значению
Разбор
Перегрузка erase(const key_type&) удаляет все элементы с таким ключом и возвращает их число. Чтобы удалить одно вхождение, передают итератор (и сначала проверяют, что find не вернул end()).
- Удаление одного элемента делает только перегрузка с итератором.
- Индексов у multiset нет.
- Код компилируется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.