动态添加对象?

时间:2011-04-27 15:26:05

标签: c++


#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

static int c;

class DAI   //DynamicArrayInput
{
public :
    void getCountry()
    {
    cout << "Country : ";
    cin >> Country;
    }

    void putCountry()
    {
    cout << Country << endl;
    }
    static int putCount()
    {
    return count;
    }
private :
    static int count;
    char Country[30];
};



int main()
{
vector< DAI > A;
DAI B[3];
//DAI * B;

cout << "Enter name of countries\n";
  for(int i=0; i < 3; i++)
  {
        //THIS DOESN'T WORK
    /*
    c++;   //c is a static variable declared at top
    B = new DAI[sizeof(DAI) * c/sizeof(DAI)];
    GIVES WRONG OUTPUT :
    Enter name of countries
    Country : a
    Country : b
    Country : c
    Printing name of countries


    c
    size of vector A is 3
    vector after initialisation:

    */  
    A.push_back(B[i]);
    B[i].getCountry(); 
  }
  cout << "Printing name of countries\n";
  for(int i=0; i < 3; i++)
  {
    B[i].putCountry();
  }

cout << "size of vector A is " << A.size() << "\
    \nvector after initialisation:" << endl;

return 0;
}


**/*
CORRECT OUTPUT WITH LIMITED ARRAY SIZE = 3:
*Enter name of countries
 Country : a
 Country : b
 Country : c
 Printing name of countries
 a
 b
 c
 size of vector A is 3
 vector after initialisation:*
*/**

我刚刚学习,这不是我的功课, 我不希望被限制在任何数组大小,如上面,但当我尝试使用第一个for循环中的staements时提到它不起作用 我的意思是这不起作用

c++;   //c is a static variable declared at top
B = new DAI[sizeof(DAI) * c/sizeof(DAI)];  //B is a pointer of type class DAI 

我的目标是动态使用我喜欢的对象数组,以便我可以输入任何数量的国家,我不想使用类似B [3]的东西,但是我知道数组大小,但我无法做到。

请指导我,帮助我。

2 个答案:

答案 0 :(得分:2)

  

C ++; // c是在顶部声明的静态变量
  B =新DAI [sizeof(DAI)* c / sizeof(DAI)];

此处您将newmalloc混淆。要分配DAI类型的c元素,只需执行

B = new DAI[c];

然而,你最好的选择是继续使用std :: vector,它本身可以处理大小和容量。

for (int i = 0; i != 10; ++i)
    A.push_back(DAI());

向矢量A添加10个DAI。

修改
您还可以从头开始创建具有多个DAI的向量:

std::vector<DAI> A(10);

这也会同时创建一个包含10个元素的向量。与总是包含3个元素的B[3]不同,向量可以根据需要增长或缩小,而无需处理分配。

答案 1 :(得分:0)

您的数组是静态的DAI[3] v(v在进程'堆栈中)。为了能够动态添加元素,您需要使用DAI[INITIAL_SZ] v = new DAI[INITIAL_SZ](现在v在堆中)更改它,以便现在可以在添加/删除元素时重新分配它。