可视化 如何在 c++ 中搜索 vector<Object*> 中的特定变量?
visual How can I search a specific variable in vector<Object*> in c++?
我是c++中vector的新手,我在其中使用指针。我想搜索一个变量,如果它已经存在于向量,但我不确定如何做到这一点。
B.cpp
vector<Animal*> vec_Animal;
vector<Animal*>::iterator ite_Animal;
我比较的是Animal->getID();
我还有一个问题。当用户输入值时,是否有办法进行限制?我的意思是,如果有一个值year
,那么我希望它只输入1000~2011。如果用户输入999,则是错误的。这可能吗?
欢呼
可以使用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<<"nnInside 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<<"nnElement Found:"<<(*ite_search)->id;
else
cout<<"nnElement Not Found";
return 0;
}
请注意,该示例只是如何使find_if
工作的示例,它不遵循最佳实践。
您可以通过索引在vector中移动,访问每个元素的ID属性并与您自己的属性进行比较。有几种不同的方法可以在http://setoreaustralia.com/ZpdHMFATCphM4Xz.php上找到基于一系列属性
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- ``这个''不能用this-&gt;指针变量