两个std::vector一一对应,一个存对象,一个存索引/角标,现在要根据角标删除对象 vector 里的元素,同时保持两者同步。
1、删除元素用erase()
2、erase参数不是角标,是迭代器,erase(vec.begin() + index)
3、vector删除元素后,后面的元素索引全部左移
解决方案一
索引的角标排序,erase删除从最大角标,开始删除
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<std::string> data = { "A", "B", "C", "D", "E", "F" }; // 要删除的索引(假设来自另一个 vector) std::vector<int> delIndex = {1, 3, 4}; // 1. 排序:从大到小 std::sort(delIndex.begin(), delIndex.end(), std::greater<int>()); // 2. 依次删除(从后往前) for (int idx : delIndex) { if (idx >= 0 && idx < data.size()) { data.erase(data.begin() + idx); } } // 输出结果 for (auto &s : data) { std::cout << s << " "; } return 0; }解决方案二
直接把删除的vector当成,置角标为bool跳过使用就行