我是c++ STL的新手,并且正在从电子书和在线资源中学习。我想要创建一个对象列表,使用::interator和list.insert()初始化它们,最后显示每个对象中存储的值。以下是代码:
#include <iostream>
#include <list>
#include <algorithm>
#define MAX 50
using namespace std;
class numbers{
int a;
int b;
int c;
int sumvar;
int sum()
{
return(sumvar=a+b+c);
}
public:
numbers(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
}
void display()
{
cout<<a<<endl<<b<<endl<<c<<endl<<endl;
}
};
int main()
{
list<numbers> listofobjects;
list<numbers>::iterator it=listofobjects.begin();
for(int i=1;i<MAX-1;i++)
{
int j=i*21-4;
int k=i*j/7;
numbers *temp = new numbers(i,j,k); //i went through a two step initialise
numbers n=*temp;
listofobjects.insert(it,n);
it++;
}
for(it=listofobjects.begin();it!=listofobjects.end();it++)
{
it->display();
}
}所以我有两个问题: 1)我是否正确地初始化了对象? 2)当我运行程序时,程序输出从32开始。不是从1开始吗?

发布于 2016-06-07 01:08:29
不,没有正确初始化列表。你的代码泄露了记忆。
你的代码:
1)使用numbers类的new分配一个新实例。
2)生成实例化对象的副本。
3)将复制对象插入到std::list中。
因此,new-ed对象会被泄露。你唯一需要做的就是:
listofobjects.insert(it, numbers(i, j, k));现在,就顺序错误的原因而言,这是因为一个相关的原因--插入位置的迭代器没有被正确地递增。插入的内容应该是:
it = ++listofobjects.insert(it, numbers(i, j, k));https://stackoverflow.com/questions/37668946
复制相似问题