访问容器内元素的成员函数

alexandnpu 2010-01-13 08:41:46
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

class object
{
public:
object();
object(int v);
object(object &a);
virtual ~object();

int getData();
void setData(int v);
private :
int data;
};

object::object()
{
this->data = 0;
}
object::object(int v)
{
this->data = v;
}
object::object(object &a)
{
this->data = a.getData();
}
object::~object()
{}
int object::getData()
{
return this->data;
}
void object::setData(int v)
{
this->data = v;
}











int main(int argc, char **argv)
{
int array[] = {1,4,2,5,8,4};
list<int> lt(array, array + sizeof(array) / sizeof(int));

list<object*> test(10);
object first(4);
object second(2);
object third(8);

test.push_back(&first);
test.push_back(&second);
test.push_back(&third);

for(list<object*>::iterator iter = test.begin(); iter != test.end(); ++iter)
{
cout << (*iter)->getData() << endl;
}
return 0;
}


代码如上,我的想法就是访问通过iter遍历这个容器来访问其中的成员函数?
为什么出错呢?这几天有点糊涂,上来问问大侠们,多谢了
...全文
166 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunyun050924 2010-01-16
  • 打赏
  • 举报
回复
不懂,解引用就可以用点操作符调用了吧
elegant87 2010-01-15
  • 打赏
  • 举报
回复

//iterator 就相当于指针,用之前必须进行初始化
int main(int argc, char **argv)
{
int array[] = {1,4,2,5,8,4};
list<int> lt(array, array + sizeof(array) / sizeof(int));

// list<object*> test(10);//此处说明定义10个object的指针,并没有赋值
//修改如下
object obj(100);
list<object*>test(10,&obj);
object first(4);
object second(2);
object third(8);

test.push_back(&first);
test.push_back(&second);
test.push_back(&third);

for(list<object*>::iterator iter = test.begin(); iter != test.end(); ++iter)
{
cout << (*iter)->getData() << endl;
}
system("pause");
return 0;
}
herry-Li 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pady_pady 的回复:]
list <object*> test(10);
改为list <object*> test;
不然前面十个指针为野指针
或者改这里
for(list <object*>::iterator iter = test.begin() + 10; iter != test.end(); ++iter)
[/Quote]

此仁兄说的很对
herry-Li 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 j2meme 的回复:]
关注,学习
[/Quote]


此仁兄说的很对
macrojj 2010-01-14
  • 打赏
  • 举报
回复
list<object*> test(10);
这样是已经分配了内存。要往已经分配的里面赋值 要用[]
pushback是新分配的。所以你前面10个都不知道向哪个地址止的
zhou1xp 2010-01-14
  • 打赏
  • 举报
回复
mark
pady_pady 2010-01-14
  • 打赏
  • 举报
回复
list<object*> test(10);
改为list<object*> test;
不然前面十个指针为野指针
或者改这里
for(list<object*>::iterator iter = test.begin() + 10; iter != test.end(); ++iter)
j2meme 2010-01-14
  • 打赏
  • 举报
回复
关注,学习
deng1243 2010-01-13
  • 打赏
  • 举报
回复
一开始list<object*>::iterator iter = test.begin();
(*iter)->getData() 访问的是未知内存
deng1243 2010-01-13
  • 打赏
  • 举报
回复

#include <iostream>
#include <list>

using namespace std;

class object
{
public:
object();
object(int v);
object(object &a);
virtual ~object();

int getData();
void setData(int v);
private :
int data;
};

object::object()
{
this->data = 0;
}
object::object(int v)
{
this->data = v;
}
object::object(object &a)
{
this->data = a.getData();
}
object::~object()
{}
int object::getData()
{
return this->data;
}
void object::setData(int v)
{
this->data = v;
}

int main(int argc, char **argv)
{
int array[] = {1,4,2,5,8,4};
list<int> lt(array, array + sizeof(array) / sizeof(int));

list<object*> test;//mark
object first(4);
object second(2);
object third(8);

test.push_back(&first);
test.push_back(&second);
test.push_back(&third);

for(list<object*>::iterator iter = test.begin(); iter != test.end(); ++iter)
{
cout << (*iter)->getData() << endl;
}
return 0;
}
wwq100 2010-01-13
  • 打赏
  • 举报
回复
迭代器解引用
clyu1981 2010-01-13
  • 打赏
  • 举报
回复
(*iter)->getData() 这句好像有问题。

65,210

社区成员

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

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