#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]的东西,但是我知道数组大小,但我无法做到。
请指导我,帮助我。
答案 0 :(得分:2)
C ++; // c是在顶部声明的静态变量
B =新DAI [sizeof(DAI)* c / sizeof(DAI)];
此处您将new
与malloc
混淆。要分配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在堆中)更改它,以便现在可以在添加/删除元素时重新分配它。