【发布时间】:2019-02-11 14:28:32
【问题描述】:
我想删除存储在 vector 中的重叠字符串,只显示一个元素。
我对矢量字典顺序进行了排序,效果很好。
接下来是擦除,我使用下面的代码。
for(auto iter = begin(vec); iter != end(vec); iter++) {
auto frontIter = (iter + 1);
if((*iter).compare(*frontIter) == 0)
vec.erase(iter);
}
但它只会删除一个重叠元素。
如果我输入像 a a(3 个字符串)并且向量的所有元素都显示 a a(2 个字符串)
我认为vec.erase(iter); 的一部分有问题..
【问题讨论】:
-
vec.erase()调用使所有在iter或之后引用vec(元素)的迭代器无效。您的代码假设迭代器仍然有效,因此具有未定义的行为。无论如何,请查找标准算法unique()。 -
@Peter 感谢您的建议。我会在参考处检查
unique(),
标签: c++ string vector iterator