C++ 获取指向列表中元素的指针

C++ 获取指向列表中元素的指针,c++,list,vector,iterator,C++,List,Vector,Iterator,我有一个满是struct account的列表 我想从函数返回一个account*类型的指针。它是怎么做到的 account* find_account(int ID){ for (list<account>::iterator i = accounts_database.begin; i != accounts_database.end; i++ ){ if (i->id==ID) return &(*(i));

我有一个满是
struct account
的列表

我想从函数返回一个
account*
类型的指针。它是怎么做到的

account* find_account(int ID){
    for (list<account>::iterator i = accounts_database.begin; i != accounts_database.end; i++ ){
        if (i->id==ID)
            return &(*(i));
    }
    else return NULL; 
}
account*find_account(int-ID){
对于(列表::迭代器i=accounts\u database.begin;i!=accounts\u database.end;i++){
如果(i->id==id)
回报&(*(i));
}
否则返回NULL;
}
这不管用。。。 你知道从迭代器中获取
帐户*
的正确方法是什么吗?

你忘记了
开始
结束
后面的
()
。同样使用C++11风格,我会像这样编写代码,看起来好多了

account* find_account(int ID)
{
    for ( auto & elem : accounts_database )
        if ( elem.id == ID )
            return &elem;
    return nullptr;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
结构帐户
{
int-id;
字符串名;
};
账户*查找账户(整数);
帐户*查找帐户(int ID)
{
在数据库中列出帐户;
账户*a1、*a2;
a1=新账户();
a2=新账户();
a1->id=10;
a1->name=“C++”;
a2->id=30;
a2->name=“Java”;
账户*result_found=新账户();
账户数据库。推回(a1);
账户\数据库。推回(a2);
列表::常量迭代器i;
对于(i=accounts\u database.begin();i!=accounts\u database.end();++i)
{
如果((*i)->id==id)
{
结果_found=*i;
打破
}
其他的
结果_found=NULL;
}
返回找到的结果;
}
int main()
{
账户*a=查找账户(30);
返回0;
}
以上代码可能会更好地帮助您。 只是我写了一个粗略的代码,请尽量优化


欢迎评论…

“这不起作用”-您会遇到什么错误?我猜是关于
const
?提示:你使用了<代码> conthyIcthult<代码>,但是返回一个非代码> const pTeN.。但是它仍然不工作。请提供实际的错误,并且可能也是个好主意。只需删除
else
关键字即可。
#include "stdafx.h"

#include<iostream>
#include<conio.h>
#include <list>
#include<iomanip>
using namespace std;


struct account
{
    int id;
    string name;
};
account* find_account(int);
account* find_account(int ID)
 {
    list<account*> accounts_database;
    account* a1,*a2;
    a1= new account();
    a2= new account();
    a1->id = 10;
    a1->name = "C++";
    a2->id = 30;
    a2->name = "Java";
    account* result_found= new account();
    accounts_database.push_back(a1);
    accounts_database.push_back(a2);
    list<account*>::const_iterator i;
    for(i = accounts_database.begin(); i != accounts_database.end(); ++i) 
    {
        if ((*i)->id==ID)
        {
            result_found = *i;
            break;
        }
        else
            result_found = NULL; 
    }
    return result_found;
}
int main( )
{
   account* a = find_account(30);
   return 0;
}