我有两个向量,一个是我想擦除的另一个向量的索引向量。目前我正在做以下事情:
#include <vector>
#include <iostream>
#include <string>
int main() {
std::vector<std::string> my_vec;
my_vec.push_back("one");
my_vec.push_back("two");
my_vec.push_back("three");
my_vec.push_back("four");
my_vec.push_back("five");
my_vec.push_back("six");
std::vector<int> remove_these;
remove_these.push_back(0);
remove_these.push_back(3);
// remove the 1st and 4th elements
my_vec.erase(my_vec.begin() + remove_these[1]);
my_vec.erase(my_vec.begin() + remove_these[0]);
my_vec.erase(remove_these.begin(), remove_these.end());
for (std::vector<std::string>::iterator it = my_vec.begin(); it != my_vec.end(); ++it)
std::cout << *it << std::endl;
return 0;
}
但我认为这是不优雅和低效的。此外,我认为我必须小心对remove_these
向量进行排序并从末尾开始(这就是我在索引 0 之前擦除索引 3 的原因)。我想要一个擦除命令,比如
my_vec.erase(remove_these.begin(), remove_these.end());
但是这当然行不通,因为my_vec.erase()
期望迭代器引用相同的向量。