C++ 通过类中的特定变量进行搜索

C++ 通过类中的特定变量进行搜索,c++,list,iterator,find,C++,List,Iterator,Find,我有一个指向类的指针列表: list<AbsClient*> clients; 列出客户; AbsClient可以是3个客户端中的1个:TempClient、RegisteredClient、VIPClient 在AbsClient中有一个受保护的变量:phone_number 我需要遍历客户列表,并搜索特定的电话号码 我试过这个: list<AbsClient*>::iterator iter; for(iter=clients.begin();it

我有一个指向类的指针列表:

list<AbsClient*> clients;
列出客户;
AbsClient可以是3个客户端中的1个:TempClient、RegisteredClient、VIPClient

在AbsClient中有一个受保护的变量:phone_number

我需要遍历客户列表,并搜索特定的电话号码

我试过这个:

    list<AbsClient*>::iterator iter;
    for(iter=clients.begin();iter!=clients.end();++iter)
{
    if(iter->phone_number == phone)
    {

    }
}
list::iterator iter;
for(iter=clients.begin();iter!=clients.end();++iter)
{
如果(iter->电话号码==电话)
{
}
}
但它不允许我访问iter->电话号码:

错误:表达式必须具有指向类类型的指针

这条线怎么了

另外,是否可以使用stl::find函数并以某种方式告诉它通过“phone_number”变量进行搜索


谢谢

您可以将迭代器视为容器的“指向元素的指针”。容器中元素的类型是另一个指针。因此,至少在语法上,您处于双指针状态,因此您需要更改取消引用迭代器的方式:

(*iter)->phone_number == phone
您的帖子说,
phone\u number
是受保护的成员,但是,当您不在该类或派生类中时,您无法访问受保护的变量,因此您需要使用访问器方法或更改数据成员的可见性

不,您不能使用
std::find
来执行此操作(至少不能直接执行),但如果符合以下条件,您可以使用
std::find\u:

iter = std::find_if(clients.begin(), clients.end(),
    [phone](AbsClient* cl) { return cl->phone_number == phone; });
如果您不使用C++11,那么它会更详细一些:

struct MatchPhone {
    explicit MatchPhone(PhoneNumber p) : phone(p) {}
    bool operator()(AbsClient* cl) {
        return cl->phone_number == phone;
    }
    PhoneNumber phone;
};

// ...
iter = std::find_if(clients.begin(), clients.end(), MatchPhone(phone));
// ...

if(iter->phone\u number==phone)
应该是
if((*iter)->phone\u number==phone)
,因为iter指向另一个指针的值类型(AbsClient*)AbsClient@Mr.Anubis如果((*iter)->phone\u number==phone)给我一个错误,说:member AbsClient::phone\u number不可访问。And:没有与这些操作数匹配的运算符“==”。结构中的“PhoneNumber”是什么?你是说我的可变电话号码吗?或者某种类型的。。。?编辑:我想这是一种类型。所以我需要字符串。@AdamDe您的
phone\u number
变量的类型不在您的问题中,所以我编了一个。我将phone\u number更改为public,现在我有一个错误:没有运算符“=”匹配这些操作数(在线:cl->phone\u number==phone)。编辑:电话和电话号码都是字符串。@AdamDe使用我的灵力,我推断你声明的电话号码与电话不同。或者它们是一些奇怪的字符串类型,没有声明
运算符==
。@AdamDe那么它们就不是
std::string
s了。您是否编写了自己的字符串类型?