1:我的目标是使用指针创建两个任意数组:一个具有名称,另一个具有相应的数字。从我之前的问题来看,我知道将数组加倍是处理任意大小的好方法。所以,我试图相应地加倍两个数组。但是,当int数组加倍时,字符串数组不会加倍。你能解释一下,问题是什么?
2:是否有替代创建任意字符串数组来存储名称列表?
以下是代码的一部分:
string *pn = new string [size];
int *pd = new int [size];
while (x != 0) {
if (size == k+1) {
pn = doubn (pn, size);
pd = doubd (pd, size);
}
pn[k] = name;
pd[k] = val;
cout << "Another entry? (0 for exit)";
cin >> x;
getline (cin, name, ',');
cin >> val;
++k;
}
for (int i = 0; i<k; ++i) {
cout << pn[i] << " - " << pd[i] << " days"; }
del (pn, pd, k);
cin.get ();
cin.ignore();
}
string* doubn (string *pn, int size) {
string* pnn = new string [size*2];
for (int i = 0; i < size; ++i) {
pnn [i] = pn[i]; }
delete pn;
return pnn; }
int* doubd (int *pd, int size) {
int *pdn = new int [size*2];
for (int i = 0; i<size; ++i) {
pdn [i] = pd[i];}
delete pd;
return pdn;}
答案 0 :(得分:1)
要使用任意大小的数组,请使用向量。
向量是C ++标准模板库(STL)的一部分,需要#include<vector>
标题。
有关详情,请查看:http://www.cplusplus.com/reference/vector/vector/
此外,您应该使用delete []
代替delete
。
答案 1 :(得分:0)
您对delete
分配的内存使用new[]
,您应该使用delete[]
代替。
无论如何,使用std::vector
会更简单,也不会出错。