Тест на знание C++
Русский
Avanzato
А вы всё знаете о C++? Уверены? Тогда этот тест именно для вас!
Descrizione
32
Domande
30 sec
Per domanda
5:03
Tempo medio
4,0
Punteggio contest
4,0
Valutazione della community
13
Partecipanti
6 commenti
Giant Snail giudice
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 autore
Видимо, имеется в виду, что эти итераторы теперь указывают на другие элементы, но тем не менее они валидны. При удалении элемента все элементы после него "сдвигаются" на один шаг влево, поэтому итератор на удалённый элемент будет указывать на следующий элемент (или на 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 autore
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.
Насколько я понимаю, это возможно только, если именно сдвигаются элементы, а не реаллоцируется вектор.
Partecipa al quiz per lasciare un commento