【发布时间】:2018-07-04 09:45:36
【问题描述】:
鉴于std::set,在时间迭代期间更改集合的最佳方法是什么?
例如:
std::set<T> s; // T is a some type (it's not important for the question).
// insertions to s
for (std::set<T>::iterator it = s.begin(); it != s.end(); it++) {
T saveIt(*it);
s.erase(*it);
s.insert( saveIt + saveIt ); // operator+ that defined at `T`
}
根据我在某些资料中读到的内容,这是不好的方式,因为:从集合中移除可能会改变集合的结构。
那么更好(/最好)的方法是什么?
【问题讨论】:
-
您必须使用函数生成的迭代器来正确更新
it。(但您也有迭代新项目的风险) -
一开始就地做这个有什么意义?
-
@Jarod42 现在按照你说的可以吗? (我编辑了问题)
-
空间有限制吗?就像您提到的那样,这是一个坏主意,新的
set将是一个简单的解决方案。 -
@MaximEgorushkin:这取决于
operator <和operator +的实现方式。 (使用std::set<int, std::greater<>>之类的就可以了)。