c++ - 删除特定索引处的 vector 元素

标签 c++ loops vector indexing

我无法从我拥有的 vector 类型字符串中删除某些索引。我的任务是用 html 标签(html、head 等)填充一个 vector ,但我需要去掉不匹配的标签(假设只有 p、br、img)。每次我在 for 循环之后打印 vector 时,我都会得到一个杂散的 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]);
    }
}

最佳答案

在移除当前元素后,您正在迭代下一个预期的 tagStorage 元素。

举个例子,假设您想从“Hello!”中删除每个“l”

"Hello!"
 ^

我++

"Hello!"
  ^

我++

"Hello!"
   ^

删除“l”。

我++

"Helo!"
    ^

如您所见,删除“l”后的迭代恰好经过下一个字符。一种解决方案是在删除元素后递减 i,以补偿 for 循环递增。

关于c++ - 删除特定索引处的 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967173/

相关文章:

vba - 对于循环设置字体和范围内部花费的时间太长

c# - 使用星号的图表(循环、数组)

c++ - 如何从 C++ 中的 vector 中删除几乎重复项

c++ - 迭代器不兼容错误

c++ - 如何优化虚幻引擎 4 中 Actor 的生成?

c++ - 无符号长按位运算符?

c++ - 如何释放 Gdiplus::Bitmap::FromFile 分配的内存

c++ - 启用 wordWrap 的 QLabel 的垂直大小

mysql - 是否可以循环遍历 MySQL SELECT 中的逗号分隔列表?

arrays - 将元胞数组中的 double 插入 MATLAB 中的向量