如何获得list中第n个对象?

djhdu 2004-03-29 07:18:28
我有一个 std::list<CInfo *> m_InfoList;
我想获得第n个对象
CInfo GetInfo(int n)
{
std::list<CInfo *> Info_iter;

Info_iter=m_InfoList.begin()+nColumn;
if (Info_iter) //错误行
{
return *Info_iter;
}

return NULL;
}

如何写才正确呢?
...全文
958 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
student2002 2004-03-31
  • 打赏
  • 举报
回复
改成:
CInfo GetInfo(int n)
{
std::list<CInfo *>::iterator Info_iter;

Info_iter=m_InfoList.begin()+nColumn;
if (Info_iter!=m_InfoList.end()) //错误行
{
return *Info_iter;
}

return NULL;
}
sharkhuang 2004-03-30
  • 打赏
  • 举报
回复
list的iter没有随机属性!只能++ 不能[n]
北极猩猩 2004-03-30
  • 打赏
  • 举报
回复
list适合顺序访问和随机插入,如果经常要随机访问应该使用vector或deque

如果是偶尔要访问第n各元素,可以向上面一样,使用advance
wingfiring 2004-03-30
  • 打赏
  • 举报
回复
可以访问的,不过你要这样:
Info_iter=m_InfoList.begin();
std::advance(Info_iter, nColumn)
可能需要包含头文件:
#include <algorithm>
当然,advance之前,你必须保证list中有不少于nColumn个成员。
Bruceleexiaokan 2004-03-30
  • 打赏
  • 举报
回复
list的advance具有是线性开销。如果开销是主要考虑因素的话,可以采用vector。
vector::iterator具有random iterator type,advance是常数级开销。
Darkay_Lee 2004-03-30
  • 打赏
  • 举报
回复
设计有问题!要随机访问的话,不应该使用list
cgsw12345 2004-03-30
  • 打赏
  • 举报
回复
用iterator可以实现!
rorot 2004-03-29
  • 打赏
  • 举报
回复
list 可以访问第n个对象吗? 除非你抛除去前面得
saville 2004-03-29
  • 打赏
  • 举报
回复
list是链表啊,内存地址不连续的。你用Info_iter=m_InfoList.begin()+nColumn当然不行了
zhangyan_qd 2004-03-29
  • 打赏
  • 举报
回复
如果追究起来,list就是不让你随机访问的。如果要随机访问就应该用vector
allen_zhaozhencn 2004-03-29
  • 打赏
  • 举报
回复
CInfo GetInfo(int n)
{
std::list<CInfo *> Info_iter;
Info_iter = m_InfoList.begin();
int i = 0;
if (n > m_InfoList.size( ) )
throw ;

while(i < n)
{
// Info_iter++;//最好用前置

++Info_iter;
i++;
}
return *Info_iter;
}
这样行吗?
djhdu 2004-03-29
  • 打赏
  • 举报
回复
少判断了n超过size
weixiaohua 2004-03-29
  • 打赏
  • 举报
回复
CInfo GetInfo(int n)
{
std::list<CInfo *> Info_iter;
Info_iter = m_InfoList.begin();
int i = 0;
while(i < n)
{
Info_iter++;
i++;
}
return *Info_iter;
}
这样行吗?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧