关于std::listiterator问题

黑夜愁客 2009-04-07 03:59:42

class Buddy{

public:
Buddy(){
x =0.0,y = 0.0;

//get and set method
private:
double x,y;
}

list<Buddy>::iterator iter;
for(iter = list1->begin(); iter!=list1->end; iter++){
if(iter->getX() * (iter+1)->getX() <0){
........
}
}
我先在for循环体里面求list相邻的两个数相乘小于零
但是我碰到的问题是没有这样的形式
比如 (iter+1)就出错了,谢谢帮忙。
...全文
994 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑夜愁客 2009-04-07
  • 打赏
  • 举报
回复
我重写了list
yangkunhenry 2009-04-07
  • 打赏
  • 举报
回复
list容器的iterator不支持算术运算和关系运算,只支持自增自减和相等不等操作。
maosher 2009-04-07
  • 打赏
  • 举报
回复
看一下list和vector的 迭代器

内存不连续,不能加1的
zhangjundriver 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lzr4304061988012 的回复:]
C/C++ code
for(iter = list1->begin(); ; ){
if(iter->getX() * (++iter)->getX() <0){
}
if(++iter == List1->end())
break;
--iter;
}
[/Quote]

这里面如果iter已经是最后一个元素呢(就是第一次进入该for循环的时候)?那就有点问题的

iterator不是随机迭代器,不能用iter+1,这就错了。
zhangjundriver 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lzr4304061988012 的回复:]
C/C++ code
for(iter = list1->begin(); ; ){
if(iter->getX() * (++iter)->getX() <0){
}
if(++iter == List1->end())
break;
--iter;
}
[/Quote]

这里面如果iter已经是最后一个元素呢(就是第一次进入该for循环的时候)?那就有点问题的

iterator不是随机迭代器,不能用iter+1,这就错了。
必成桂 2009-04-07
  • 打赏
  • 举报
回复
list没有+1这个算术运算。
另外,你可以用两个迭代器来完成这个循环。
lzr4304061988012 2009-04-07
  • 打赏
  • 举报
回复

for(iter = list1->begin(); ; ){
if(iter->getX() * (++iter)->getX() <0){
}
if(++iter == List1->end())
break;
--iter;
}
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yexin218 的回复:]
引用 7 楼 mengde007 的回复:
list在内存是不连续的,所以+1就免了,另外,list只是对++重载了,并没有重载+1;
那我该怎么做啊
[/Quote]

iter++,
然后再--;

呵呵
beyond071 2009-04-07
  • 打赏
  • 举报
回复
(++iter)->getX();
做完后再--iter;
黑夜愁客 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mengde007 的回复:]
list在内存是不连续的,所以+1就免了,另外,list只是对++重载了,并没有重载+1;
[/Quote]那我该怎么做啊
mengde007 2009-04-07
  • 打赏
  • 举报
回复
list在内存是不连续的,所以+1就免了,另外,list只是对++重载了,并没有重载+1;
黑夜愁客 2009-04-07
  • 打赏
  • 举报
回复
我想请问的是
为什么我这里(iter+1)->getX()就有问题
黑夜愁客 2009-04-07
  • 打赏
  • 举报
回复
哦这个应该是:
class Buddy{

public:
Buddy(){
x =0.0,y = 0.0;

//get and set method
private:
double x,y;
}

list <Buddy>::iterator iter;
for(iter = list1->begin(); iter!=list1->end()-1; iter++){
if(iter->getX() * (iter+1)->getX() <0){
........
}
}

我写错了,可是不能这样写吧,老是报错 在list1->end()+1这里
rror C2784: “reverse_iterator<_RanIt>::difference_type std::operato。。。。
gkimitfk 2009-04-07
  • 打赏
  • 举报
回复
iter!=list1->end()-1时(iter+1)越界
beyond071 2009-04-07
  • 打赏
  • 举报
回复
小心迭代器越界 跟一下出错的时机就知道了
lzr4304061988012 2009-04-07
  • 打赏
  • 举报
回复
当iter == end()-1时就会出错了。
黑夜愁客 2009-04-07
  • 打赏
  • 举报
回复
class Buddy{

public:
Buddy(){
x =0.0,y = 0.0;

//get and set method
private:
double x,y;
}

list <Buddy>::iterator iter;
for(iter = list1->begin(); iter!=list1->end(); iter++){
if(iter->getX() * (iter+1)->getX() <0){
........
}
}


我想在for循环体里面求list相邻的两个数相乘小于零
但是我碰到的问题是没有这样的形式
比如 (iter+1)就出错了,谢谢帮忙。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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