Вы можете использовать алгоритм std :: find_if .
Возможно, вы используете std::vector::push_back
или такие методы для заполнения вектора. Эти методы не предоставляют никаких проверок, но один из способов сделать это - написать небольшую функцию-обертку, внутри которой вы проверяетедля действительных условий данных, и если данные хороши, то вы добавляете это в вектор, иначе вы просто возвращаете какую-то ошибку или выбрасываете std::out_of_range
исключение из вашей функции-оболочки.
Демонстрация в Интернете
Вот пример мини-эластичного кода, конечно, вам нужно будет настроить его под свои нужды:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Animal
{
public:
int id;
};
class Ispresent
{
public:
int m_i;
Ispresent(int i):m_i(i){}
bool operator()(Animal *ptr)
{
cout<<"\n\nInside IsPresent:"<<ptr->id;
return (ptr->id == m_i);
}
};
int main()
{
vector<Animal*> vec_Animal;
Animal *ptr = new Animal();
ptr->id = 10;
vec_Animal.push_back(ptr);
Animal *ptr1 = new Animal();
ptr1->id = 20;
vec_Animal.push_back(ptr1);
Animal *ptr2 = new Animal();
ptr2->id = 30;
vec_Animal.push_back(ptr2);
vector<Animal*>::iterator ite_Animal = vec_Animal.begin();
for(ite_Animal; ite_Animal != vec_Animal.end(); ++ite_Animal)
cout<<"\nVector contains:"<< (*ite_Animal)->id;
vector<Animal*>::iterator ite_search;
/*Find a value*/
ite_search = std::find_if( vec_Animal.begin(), vec_Animal.end(), Ispresent(20));
if(ite_search != vec_Animal.end())
cout<<"\n\nElement Found:"<<(*ite_search)->id;
else
cout<<"\n\nElement Not Found";
return 0;
}
Обратите внимание, что образецпросто пример того, как заставить find_if
работать, это не соответствует лучшим практикам.