【发布时间】:2022-01-20 12:24:28
【问题描述】:
如何仅使用迭代器从两个字符串向量中删除重复项(从两个向量中删除它们)?
我想它不起作用,因为如果值已经被删除,它们就无法比较,但我想不出任何其他解决方案,只有当我有一个函数可以同时擦除两个元素时。
void obrisiIsteRijeci(std::vector<std::string>& v1, std::vector<std::string>& v2){
for(auto it = v1.begin(); it != v1.end(); it++){
auto it1 = it;
for(auto it2 = v2.begin(); it2 != v2.end(); it2++){
if((*(it2) == *(it1)) && (*(it1) == *(it2))){
v1.erase(it1);
v2.erase(it2);
}
}
}
}
【问题讨论】:
-
如果一个向量是
[1 1 1],另一个是[2 2 2],那么两者都应该保持不变? -
向量是否已排序?如果是这样,那么您可以使用
set_intersection查找 then 向量之间的公共元素,然后您可以从每个向量中删除这些值。 -
v2.erase(it2)在循环的下一次迭代中,it2++无效,因为您已将其删除。 -
仅使用迭代器 -- 这到底是什么意思?光说这个基本上是没有意义的。因此,如果创建了另一个容器,并在那里使用了迭代器,这算不算?
-
哇,
if条件中有这么多括号。我迷路了。
标签: c++ algorithm for-loop vector iterator