在C ++中向Array对象添加元素

时间:2012-02-11 21:00:32

标签: c++ arrays oop object dynamic

如何在C ++中动态地向数组末尾添加元素?

我习惯使用向量来动态添加元素。但是,向量似乎不想处理对象数组。

所以,我的主要目标是拥有一个对象数组,然后能够将一个元素添加到数组的末尾以获取另一个对象。

编辑** 对不起,它的pushback()导致了我的问题。

class classex
{
private:
    int i;

public:
    classex() { }
    void exmethod()
    {
        cin >> i;
    }
};

void main()
{
    vector <classex> vectorarray;
    cout << vectorarray.size();
    cout << vectorarray.push_back();
}

现在我知道push_back必须有一个参数,但是什么参数?

3 个答案:

答案 0 :(得分:1)

阵列是固定大小的容器。因此扩大它们是不可能的。你可以解决这个问题,并在一个更大的空间中复制一个数组,并在旧的结尾处获得空间,但就是这样。

您可以创建一个比您当前需要的更大的数组,并记住哪些元素为空。当然它们永远不会是空的(它们至少包含0个),但这是一个不同的故事。

与数组一样,有许多容器,有些容器可以增长,就像stl容器一样:列表,向量,deques,集等等。

添加一个构造函数来设置i(只是为了给你的例子一个真实世界的触摸)你的示例classex,如下所示:

class classex {
public:
    classex(int& v) : i(v) {}
private:
    int i;
};

增长容器的示例如下所示:

vector <classex> c; // c for container
// c is empty now. c.size() == 0

c.push_back(classex(1));
c.push_back(classex(2));
c.push_back(classex(3));
// c.size() == 3

答案 1 :(得分:1)

  

现在我知道push_back必须有一个参数,但是什么参数?

参数是你想要附加到向量的东西。什么可能更简单或更期望?

顺便说一句,你真的,真的,真的不希望{99}的exmethod classex作为{{1}}的实际方法。这不是班级的工作方式。收集信息以创建实例不是课程工作的一部分。该类只是根据该信息创建实例。

答案 2 :(得分:-2)

编辑:问题是如何向动态分配的数组添加元素,但OP实际上意味着std :: vector。分隔符下方是我的原始答案。

std::vector<int> v;
v.push_back( 5 ); // 5 is added to the back of v.

您可以随时使用C reallocfree编辑:(假设您的对象是POD。)

与使用newdelete手动分配,复制和重新分配的要求相比,Stroustrup没有添加像续订这样的关键字,这是一个奇迹。