【问题标题】:remove overlaps string in vector with iterator c++ [duplicate]使用迭代器c ++删除向量中的重叠字符串[重复]
【发布时间】: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


【解决方案1】:

vector 的元素放在set 中,然后放回vector 将删除所有重复项。

set<string> s( vec.begin(), vec.end() );
vec.assign( s.begin(), s.end() );

如果需要做迭代器

set<string> s;
for(auto iter = begin(vec); iter != end(vec); iter++)
{
    s.insert(*iter);
}
vec.assign( s.begin(), s.end() );

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2022-01-20
    • 2016-06-29
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2021-07-02
    相关资源
    最近更新 更多