TL; DR
Используйте std :: find () .
В C ++ используйте функцию из Стандартная библиотека шаблонов (STL) , если она была предоставлена.
Разработка
Допустим, у вас есть двумерный вектор
std::vector<std::vector<int> > matrix = {
{1,2,3},
{4,5,6},
{7,8,9}
};
И если вы хотите перебрать все элементы в 2d векторе выше.
Я рекомендую вам использовать 2d iterator
:
bool element_exist(const vector< vector<int> >& input, int key){
// 2d vector iterator
vector< vector<int> >::iterator row_it; //iterate over each row(s)
vector<int>::iterator col_it; //iterate over column(s)
for (row_it = input.begin(); row_it != input.end(); row_it++) { // iterate each row(s)
for (col_it = row_it->begin(); row_it != row_it->end(); col_it++) {
if(find(row_it->begin(), row_it->end(), key) != row_it->end())
return true;
}
}
}
и вы можете использовать другую логическую переменную, чтобы получить возвращаемое значение функции key_exist
bool_var = element_exist(matrix, key);
Вся программа
#include <vector>
#include <iostream>
using namespace std;
bool element_exist(const vector< vector<int> >& input, int key){
// 2d vector iterator
vector< vector<int> >::const_iterator row_it; //iterate over each row(s)
vector<int>::const_iterator col_it; //iterate over column(s)
for (row_it = input.begin(); row_it != input.end(); row_it++) { // iterate each row(s)
for (col_it = row_it->begin(); row_it != row_it->end(); col_it++) {
if(find(row_it->begin(), row_it->end(), key) != row_it->end())
return true;
}
}
}
int main() {
// declaration
bool bool_var = false; // default false
std::vector<std::vector<int> > matrix = {{1,2,3}, {4,5,6},{7,8,9}};
bool_var = element_exist(matrix,1);
cout << "bool_var: " << bool_var << endl;
return 0;
}
Результат
bool_var: 1