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;
}