gpt4 book ai didi

c++ - 修改 std::set 中的元素

转载 作者:太空狗 更新时间:2023-10-29 23:32:45 25 4
gpt4 key购买 nike

我有以下代码-:

int main()
{
set<string> s;
s.insert( "asas" );
s.insert( "abab" );

for ( auto item : s )
{
cout << item << "\n";
reverse( item.begin(), item.end() );
}

cout << "\n";

for ( auto item : s )
{
cout << item << "\n";
}
}

输出-:

abab
asas

abab
asas

reverse() 函数根本没有修改集合的元素。
我怀疑集合中的元素根本无法修改。但是,如果是这种情况,为什么编译器本身不首先给出错误?

我在 Windows 7 上使用带有 -std=c++14 标志的 TDM-GCC 4.9.2。

最佳答案

std::set 的元素是const。如果您想改变元素,您需要执行插入和删除操作,以将容器置于您想要的状态。

在您的代码示例中:

for (auto item : s)

被翻译成类似的东西:

for (auto iter = s.begin(); iter != s.end(); ++iter)
{
auto item = *iter; // Copy!
// loop body
}

循环归纳变量 itemset 中元素的拷贝,而不是对 中实际元素的引用>设置。因此,set 没有改变。要更改集合,您需要调用 set 的成员函数,例如插入删除

item 更改为 &item 在这里无济于事;如果你这样做,你会得到一个编译时错误,因为集合的元素是常量,所以你不能对它们应用 reverse

关于c++ - 修改 std::set 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31153825/

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