gpt4 book ai didi

c++ - vector::erase 在类方法中不起作用,但在 main 中起作用;没有编译器错误,只是意外的结果

转载 作者:行者123 更新时间:2023-11-30 00:48:46 25 4
gpt4 key购买 nike

我在文件 x.cpp 中有以下语句。供应商和位置是我创建的类。如果我在我的 main.cpp 中写

Suppliers s;
s.clean_up();

在文件 x.cpp 中

void Suppliers::clean_up(){
for(auto i : setter){
i.second.clear();}}

Setter是Suppliers的公共(public)数据成员

 map<std::string,std::vector<location>> setter

当我尝试打印 map 时, map 没有被清除。相反,如果我的 main 中有以下内容,我的 map 中的值将按照我的预期被清除。

Suppliers s;
for (auto item : s.setter){
item.second.clear();}

我没有编译器错误,在一种情况下,位置 vector 被删除,在一种情况下,它没有。我唯一能想到的是 setter 的实例不一样。但是因为我使用的是一种方法,所以我不明白为什么这行不通。任何帮助都会很棒,提前致谢!

最佳答案

您应该使用对 map 项的引用进行迭代

for(auto& i : setter)
{
i.second.clear();
}

否则i将是每个 std::pair<std::string, std::vector<location>>拷贝 .所以它会clear()拷贝的 vector ,而不是 map 中的实际实例.

关于c++ - vector::erase 在类方法中不起作用,但在 main 中起作用;没有编译器错误,只是意外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com