首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在<list>中初始化对象并在c++中插入它们?它们是随机存储的吗?

如何在<list>中初始化对象并在c++中插入它们?它们是随机存储的吗?
EN

Stack Overflow用户
提问于 2016-06-07 00:58:48
回答 1查看 40关注 0票数 1

我是c++ STL的新手,并且正在从电子书和在线资源中学习。我想要创建一个对象列表,使用::interator和list.insert()初始化它们,最后显示每个对象中存储的值。以下是代码:

代码语言:javascript
复制
#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开始吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-07 01:08:29

不,没有正确初始化列表。你的代码泄露了记忆。

你的代码:

1)使用numbers类的new分配一个新实例。

2)生成实例化对象的副本。

3)将复制对象插入到std::list中。

因此,new-ed对象会被泄露。你唯一需要做的就是:

代码语言:javascript
复制
    listofobjects.insert(it, numbers(i, j, k));

现在,就顺序错误的原因而言,这是因为一个相关的原因--插入位置的迭代器没有被正确地递增。插入的内容应该是:

代码语言:javascript
复制
    it = ++listofobjects.insert(it, numbers(i, j, k));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37668946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档