我正在尝试编写一个程序来检查一个向量的内容是否存在于另一个向量中。例如:
vector<int> a = {1, 2};
vector<int> b = {6, 5, 3, 1, 9, 2};
比较这两个向量时会返回true,因为a
的内容存在于b
的某个位置。
vector<int> a = {1, 2}
vector<int> b = {3, 1, 5, 6}
这会返回false,因为a
中b
中的所有都不存在。
我已经尝试使用while
循环,但我对如何让循环中断感到困惑。
bool check_vec(vector<int> a, vector<int> b){
int checker = 0;
int i = 0;
int q = 0;
while ( true ) {
if(b.at(i) == a.at(q)) {
checker++;
i = 0;
q++;
if(checker == a.size())
return true;
i++;
}
}
}
答案 0 :(得分:3)
使用循环迭代第一个向量的内容。您不需要第二个向量的循环,只需使用std::find
。
for (auto a_elt: a) {
if (std::find(b.begin(), b.end(), a_elt) == b.end()) {
return false;
}
}
return true;
您还可以使用std::all_of
:
return std::all_of(a.begin(), a.end(), [](int a_elt) {
return std::find(b.begin(), b.end(), a_elt) != b.end();
});
答案 1 :(得分:0)
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main() {
std::vector<int> a = {1, 2};
std::vector<int> b = {6, 5, 3, 1, 9, 2};
vector<int> c( a.size() + b.size() );
std::cout "\nFirst vector values are ...\n";
std::copy( a.begin(), a.end() std::ostream_iterator<int>( std::cout, "\t" );
std::cout << '\n';
std::cout << "\nSecond vector values are ...\n" << endl;
std::copy( b.begin(), b.end(), std::ostream_iterator<int>( std::cout, "\t" );
std::cout << '\n';
auto pos = std::set_difference( a.begin(), a.end(), b.begin(), b.end(), c.begin() );
c.resize( pos - c.begin() );
std::cout << "\nValues present in vector one but not in vector two are ...\n";
std::copy( c.begin(), c.end(), std::ostream_iterator<int>( cout, "\t" ) );
std::cout << '\n';
c.clear();
c.resize( a.size() + b.size() );
pos = std::set_union( a.begin(), a.end(), b.begin(), b.end(), c.begin() );
v.resize( pos - c.begin() );
std::cout << "\nMerged vector values in vector are ...\n";
std::copy( c.begin(), c.end(), std::ostream_iterator<int>( cout , "\t" ) );
std::cout << "\n\n";
std::cout << "\nPress any key and enter to quit.\n";
std::cin.get();
return 0;
}