Я только что потратил ~ 2 на попытку выяснить ошибку, введенную в мой код из-за использования итерации auto
для контейнеров. Я начал использовать его пару дней назад, не делая много фоновой проверки, просто потому, что мне было легче писать.Почему автоматическая итерация на C++ не может выполнять операцию над элементом, на который указывает?
У меня есть следующая карта: std::map<int, VectorList>
, где VectorList
всего лишь typedef std::vector<double> VectorList
.
Я хотел выполнить операцию .clear()
на std::vector<double>
VectorList
.
Я попытался следующие:
std::map<int, VectorList> map;
for(auto elem : map)
{
elem.second.clear();
}
и это не сработало. Операция очистки не выполнялась на VectorList
. Однако, когда я выполнял .empty()
, проверьте его, он вернет True
.
Потом я вернулся к этому подходу:
for(std::map<int, VectorList>::iterator elem = map.begin(); elem != map.end(); ++elem)
{
elem->second.clear();
}
И все работало, как ожидалось.
Вопрос:
Почему auto
итерации не выполняет .clear()
операции, как ожидалось? Может ли это быть достигнуто с помощью итерации auto
?
Причина для нижнего предела? – cross