【发布时间】:2015-07-01 06:17:29
【问题描述】:
我有以下代码-:
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。
【问题讨论】:
-
您正在对项目的副本进行操作,
set中的原件没有更改。使用迭代器直接操作它们。 -
集合中的项目按特定顺序排序。这就是为什么无论集合有多大,插入和移除总是相对较快的原因。您可以指定所需的顺序,但不能更改它。如果项目的顺序对您很重要,请使用顺序容器,例如向量。