我在文件x.cpp中有以下语句。供应商和地点是我创建的课程。如果我在main.cpp中写道
Suppliers s;
s.clean_up();
和文件x.cpp
void Suppliers::clean_up(){
for(auto i : setter){
i.second.clear();}}
Setter是供应商的公共数据成员
map<std::string,std::vector<location>> setter
我尝试打印时不会清除地图。相反,如果我在main中有以下内容,我的地图中的值将按照我的预期清除。
Suppliers s;
for (auto item : s.setter){
item.second.clear();}
我没有编译器错误,在一种情况下,位置向量被删除,在一种情况下它不是。我唯一能想到的是setter的实例并不相同。但因为我正在使用一种方法,我无法理解为什么这不起作用。任何帮助都会很棒,提前谢谢!
答案 0 :(得分:6)
您应该使用对地图项的引用进行迭代
for(auto& i : setter)
{
i.second.clear();
}
否则i
将是每个std::pair<std::string, std::vector<location>>
的副本。因此它将clear()
副本的向量,而不是map
中的实际实例。