可视化 如何在 c++ 中搜索 vector<Object*> 中的特定变量?

visual How can I search a specific variable in vector<Object*> in c++?

本文关键字:变量 gt Object lt c++ vector 搜索 可视化      更新时间:2023-10-16

我是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上找到基于一系列属性

的元素