我是C ++中的新手,我正在使用指针。 我想搜索一个变量,如果它已经存在于向量中,但我不知道该怎么做。
B.cpp
vector<Animal*> vec_Animal;
vector<Animal*>::iterator ite_Animal;
我想要比较的是Animal->getID();
我还有一个问题。
当用户输入值时,有没有办法限制?
我的意思是,如果有一个值year
那么,我希望它只能输入1000~2011。如果用户输入999,那就错了。
有可能吗?
干杯
答案 0 :(得分:3)
您可以使用 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
正常工作的一个示例,它不遵循最佳做法。
答案 1 :(得分:0)
您可以通过索引遍历向量,访问每个元素的ID属性并与您自己进行比较。在http://setoreaustralia.com/ZpdHMFATCphM4Xz.php处有一些不同的方法,用于根据一系列属性查找元素