c++11 - Why auto iteration in C++ cannot perform operation on the element it points to? -
i spent ~2 on trying figure out bug introduced code due usage of auto iteration containers. started using couple of days ago, without doing background check, because found easier write.
i have following map: std::map<int, vectorlist>, vectorlist typedef std::vector<double> vectorlist.
i wanted perform .clear() operation on std::vector<double> of vectorlist.
i tried following:
std::map<int, vectorlist> map; for(auto elem : map) { elem.second.clear(); } and did not work. clear operation not being performed on vectorlist. when performing .empty() check on it, return true.
then went approach:
for(std::map<int, vectorlist>::iterator elem = map.begin(); elem != map.end(); ++elem) { elem->second.clear(); } and worked expected.
question:
why auto iteration not perform .clear() operation expected? can achieved auto iteration @ all?
because elem created by value. if want modify value in loop loop using references:
for(auto& elem : map)
Comments
Post a Comment