预期在“帮助器”功能中输出设置的元素时,元素“ 2”已被删除。但是实际结果仍然是“ 1 2 3 4 5”。
但是,集合的大小为4。
我想知道潜在的问题。
#include <iostream>
#include <set>
using namespace std;
void helper(set<int> myset, set<int>::iterator it) {
myset.erase(it);
cout << "size:" << myset.size() << endl;
for(auto el : myset)
cout << el << " ";
}
int main(int argc, const char * argv[]) {
set<int> myset = {1,2,3,4,5};
auto it = myset.begin();
it++;
helper(myset,it);
}
最佳答案
it
中的helper
是myset
中main
的迭代器。但是myset
中的helper
是myset
中main
的副本。这意味着it
函数中的helper
不会引用该函数中使用的myset
中的元素,因此它是未定义的行为。您需要在myset
中将helper
用作参考。尝试:
void helper(set<int> & myset, set<int>::iterator it)
编辑:这也解决了您可能没有注意到的另一个问题。以前,按值取
myset
时,您只是在修改本地副本。您可以(尝试)从副本中删除元素,然后打印该元素,但这不会影响传递给myset
中的函数的原始main
。通过引用,myset
函数中对helper
的更改实际上将更改原始的myset
。关于c++ - 函数中的C++ delete(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47930988/