gpt4 book ai didi

函数中的 C++ erase()

转载 作者:行者123 更新时间:2023-11-27 22:42:08 25 4
gpt4 key购买 nike

在'helper'函数中输出集合元素时,预计元素'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);
}

最佳答案

helper 中的

itmainmyset 的迭代器。但是 helper 中的 mysetmainmyset拷贝。这意味着 helper 函数中的 it 不引用您在该函数中使用的 myset 中的元素,因此它是未定义的行为.您需要将 helper 中的 myset 作为引用。尝试:

void helper(set<int> & myset, set<int>::iterator it)

编辑:这也解决了您可能没有注意到的另一个问题。以前,当按值获取 myset 时,您只是修改本地拷贝。您会(尝试)从拷贝中删除一个元素,然后打印它,但这不会影响传递给 main 中的函数的原始 myset。通过使其成为引用,在 helper 函数中对 myset 的更改实际上将更改原始 myset

关于函数中的 C++ erase(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930988/

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