如何僅使用迭代器從兩個字串向量中洗掉重復項(從兩個向量中洗掉它們)?我想它不起作用,因為如果值已經被洗掉,它們就無法進行比較,但我想不出任何其他解決方案,前提是我有一個函式可以同時擦除兩個元素。
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);
}
}
}
}
uj5u.com熱心網友回復:
我可以建議以下方法。在下面的演示程式中,std::vector<int>為了簡單起見,我使用了這種型別的向量。
#include <iostream>
#include <vector>
#include <iterator>
$include <algorithm>
int main()
{
std::vector<int> v1 = { 1, 2, 1, 2, 3, 4 }, v2 = { 1, 2, 3, 5 };
for (auto first = std::begin( v1 ); first != std::end( v1 ); )
{
auto it = std::find( std::begin( v2 ), std::end( v2 ), *first );
if (it != std::end( v2 ))
{
v2.erase( std::remove( it, std::end( v2 ), *first ), std::end( v2 ) );
auto value = *first;
auto offset = std::distance( std::begin( v1 ), first );
v1.erase( std::remove( first, std::end( v1 ), value ), std::end( v1 ) );
first = std::next( std::begin( v1 ), offset );
}
else
{
first;
}
}
for (const auto &item : v1)
{
std::cout << item << ' ';
}
std::cout << '\n';
for (const auto &item : v2)
{
std::cout << item << ' ';
}
std::cout << '\n';
}
程式輸出是
4
5
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383691.html
