【问题标题】:Deleting Elements of Vector Inside a Loop [duplicate]删除循环内的向量元素[重复]
【发布时间】:2017-03-04 06:40:11
【问题描述】:

我有一个向量,words,类型为:vector<string>。我正在尝试删除 words 中不包含在名为 largest_familyvector<string> 中的每个元素,但似乎无法做到这一点。任何帮助表示赞赏。

vector<string>::iterator it = words.begin();
for (int i = 0; i < words.size(); i++)
{
    if (find(largest_family.begin(), largest_family.end(), words[i]) == largest_family.end())
    {
        words.erase(it);
    }
    else
    {
        it++;
    }
}

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    执行此类任务的正确方法是:

    for (vector<string>::const_iterator it = words.begin(); it != words.end();)
    {
        if (find(largest_family.begin(), largest_family.end(), *it) == largest_family.end())
        {
            it = words.erase(it);
        }
        else
        {
            ++it;
        }
    }
    

    关于 SO 的相关主题很多:例如thisthis

    【讨论】:

    • 如果你要使用const_iterator,你应该打电话给cbegin()cend()
    • @GillBates 它取决于标准。我在这里没有看到 c++11 标签,这就是我没有使用它们的原因。
    • @EdgarRokyan C++ 现在是 C++14,C++ 就是这个意思。我看不到 C++03 标记。
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2014-07-03
    • 2015-02-02
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多