gpt4 book ai didi

c++ - 如何初始化 中的对象并在 C++ 中迭代它们?它们是随机存储的吗?

转载 作者:行者123 更新时间:2023-11-30 05:26:37 25 4
gpt4 key购买 nike

我是 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开始的吗? enter image description here

最佳答案

不,你没有正确初始化列表。您的代码泄漏内存。

您的代码:

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

2) 复制实例化对象

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

所以,new-ed 对象被泄露了。您唯一需要做的是:

    listofobjects.insert(it, numbers(i, j, k));

现在,至于顺序错误的原因,是因为一个相关的原因——插入位置的迭代器没有正确递增。你的插入应该是:

    it = ++listofobjects.insert(it, numbers(i, j, k));

关于c++ - 如何初始化 <list> 中的对象并在 C++ 中迭代它们?它们是随机存储的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com