从Vector Inside Loop中删除元素

Delete Elements from Vector Inside Loop

本文关键字:删除 元素 Loop Vector Inside      更新时间:2023-10-16

我有一个向量words_in_family,类型为:vector<vector<string>>。我正在尝试删除words_in_family中不等于字符串向量largest_family的每个元素,但遇到了问题,不确定原因。感谢您的帮助。

for (int i = words_in_family.size() - 1; i >= 0; i--)
{
    if (words_in_family[i] != largest_family)
    {
        words_in_family.erase(words_in_family[i]);
    }
}

erase方法不取值。相反,使用迭代器作为erase方法的参数:

vector<vector<string>>::iterator it = words_in_family.begin();
for (int i = words_in_family.size() - 1; i >= 0; i--)
{
    if (words_in_family[i] != largest_family)
    {
        words_in_family.erase(it+i);
    }
}

迭代器擦除(迭代器位置(;迭代器擦除(先迭代器,后迭代器(;

请注意,std::vector的迭代器是随机访问迭代器,因此您可以添加/减去整数值来获得其他有效迭代器。

C++std::vector擦除一个元素,在您的情况下:

从值等于largest_family:的向量(words_in_family(中擦除元素

std::vector<std::vector<std::string>>::iterator Itr;
for(Itr = Words_in_family.begin(); Itr != Words_in_family.end();)
{
    if(*Itr == largest_family)
    {
        Itr = Words_in_family.erase(Itr);
    }
    else
    {
        Itr++;
    }
}
words_in_family.erase(words_in_family.begin()+i, words_in_family.begin()+i+1);

erase将迭代器作为参数