Может ли функция size () вектора возвращать неправильное значение?
Конечно.Он может вернуть «неправильное» значение, когда «правильное» значение, которое вам нужно, не соответствует размеру вектора.
, что мой учитель сказал мне, что «size ()» «никогда не должениспользовать без контекста "
Это довольно глупое преувеличение.
На мой взгляд, было бы правильнее сказать, что существуют случаи, когда цикл с индексами и size()
будет неправильно, несмотря на то, что кажется правильным для новичка.В большинстве случаев, хотя конкретный цикл будет правильным, существует лучшая альтернатива, которая, возможно, более читабельна и менее подвержена ошибкам.Но все же есть некоторые циклы, в которых индексы и size()
превосходят, хотя такие случаи могут не встречаться.
Типичный пример того, как новичок неосознанно пишет программу с неопределенным поведением, даже если программавыглядит правильно в глазах новичка:
for (size_t x = 1; x <= telephone_mat.size(); ++x)
Другая типичная ошибка новичка:
for (size_t i = 0; i < vec.size(); ++i)
if (condition)
vec.erase(vec.begin() + i);
Пример потенциально более простого способа написания ваших циклов (хотя то, применимо ли это, зависит откак изменяются векторы):
for (auto& nums : telephone_mat){
for (auto& element : nums){
//modification in the matriz...
}
}