Тест на знание C++
Русский
Advanced
А вы всё знаете о C++? Уверены? Тогда этот тест именно для вас!
Description
32
Questions
30 sec
Per question
5:03
Average time
4.0
Contest Score
4.0
Community Rating
13
Participants
6 comments
Giant Snail judge
This test may have a higher chance of receiving a reward. Nominated for:

Educational explanations. 👍 Explanations cover why the correct answers are correct and why the
wrong answers are wrong. E.g.: #q1, #q2, #q5, etc.
Kind Monkey
, что он очень хороший
Mindful Kitten
В вопросе про erase ошибка, удаленный итератор инвалидируется в векторе, см
https://en.cppreference.com/w/cpp/container/vector/erase
Small Lizard author
Видимо, имеется в виду, что эти итераторы теперь указывают на другие элементы, но тем не менее они валидны. При удалении элемента все элементы после него "сдвигаются" на один шаг влево, поэтому итератор на удалённый элемент будет указывать на следующий элемент (или на end()), то есть останется валидным. Код, который подтверждает мои слова: https://ideone.com/CwfNnj
Mindful Kitten
Small Lizard Стандарт про это не говорит, он утверждает, что все итераторы инвалидируются http://eel.is/c++draft/vector#modifiers-3

Это вправе за имплементацией реаллоцировать вектор при удалении элементов

https://stackoverflow.com/questions/50599555/does-vectorerase-reduce-vectorcapacity
Small Lizard author
Mindful Kitten Хм, а почему тогда и на https://en.cppreference.com/w/cpp/container/vector/erase, и на http://eel.is/c++draft/vector#modifiers-4 в Complexity написано, что:
the assignment operator of T is called the number of times equal to the number of elements in the vector after the erased elements.
Насколько я понимаю, это возможно только, если именно сдвигаются элементы, а не реаллоцируется вектор.
Take the quiz to leave a comment