删除特定索引处的矢量元素

时间:2017-03-23 04:17:28

标签: c++ loops vector indexing

我无法从我拥有的矢量类型字符串中删除某些索引。我的任务是填充带有html标签的向量(html,head等),但我需要摆脱没有匹配的标签(假设只有p,br,img)。每次我在for循环后打印矢量时,我得到一个流浪的br和p。非常感谢帮助!

    for (int i = 0; i < tagStorage.size(); i++) {

    if (tagStorage[i].find_first_of('/') == true) { //searches for closing tags
        closingTags.push_back(tagStorage[i]);
    }
    else if (tagStorage[i].find("<p>") != string::npos) { //searches for <p> tag
        noMatch.push_back(tagStorage[i]);
        tagStorage.erase(tagStorage.begin() + i); //erase tag
    }
    else if (tagStorage[i].find("<br>") != string::npos) { //searches for <br> tag
        noMatch.push_back(tagStorage[i]);
        tagStorage.erase(tagStorage.begin() + i); //erase tag
    }
    else if (tagStorage[i].find("<img") != string::npos) { //searches for <img ..> tag
        noMatch.push_back(tagStorage[i]);
        tagStorage.erase(tagStorage.begin() + i); //erase tag
    }
    else {
        openingTags.push_back(tagStorage[i]);
    }
}

1 个答案:

答案 0 :(得分:2)

在删除当前元素后,您将迭代超过下一个预期的tagStorage元素。

例如,假设您要删除所有&#39; l&#39;来自&#34;您好!&#34;

"Hello!"
 ^

我+ +

"Hello!"
  ^

我+ +

"Hello!"
   ^

删除&#39; l&#39;。

我+ +

"Helo!"
    ^

正如您所看到的,删除&#39; l&#39;之后的迭代走到下一个角色。解决方法是在删除元素后递减i,以便补偿for循环增量。