在开始之前,我应该在这个程序中提到我不能使用矢量。
嘿所有,我正在为“三巨头”制作一个节目"并出现了问题。用户可以输入一次名称,然后他们可以输入他们注册的课程。他们可以输入任意数量的课程,但当他们输入"完成"时,他们会#39; ;重新输入内容,阵列应根据他们输入的课程数量来制作。
现在没有使用向量,我必须删除数组以释放资源,然后使用新大小重新创建它,因为用户进入另一个类,然后当他们完成时,它会复制这些临时课程到一个名为" vals"。
的数组字符串指针以下是我遇到问题的方法:
void Student::getStudentInput()
{
cout << "Enter Student name: ";
cin >> this->name;
string *tempCourses;
tempCourses = new string[];
stringstream strStream;
string x = "";
int numcourses = 0;
while (x.compare("done") != 0)
{
cout << "Enter a new Course: ";
cin >> x;
cout << " " << endl;
if (x.compare("done") != 0)
{
delete[] tempCourses;
numcourses++;
tempCourses = new string[numcourses];
for (int i = 0; i < numcourses; i++)
{
tempCourses[i] = x;
x = "";
}
}
}
this->size = numcourses;
vals = new string[size];
for (int i = 0; i < size; i++)
{
vals[i] = tempCourses[i];
}
}
它刚刚打印出一个我已经输入到屏幕上的课程(因为删除了[]临时课程),但我不知道如何解决这个问题,因为我必须删除数组以制作一个更大的新数组。
任何信息表示赞赏!!感谢。
答案 0 :(得分:0)
您过早删除tempCourses
。更改代码如下:
if (x.compare("done") != 0)
{
auto newCourses = new string[numcourses+1];
for (int i = 0; i < numcourses; i++)
{
newCourses[i] = tempCourses[i];
}
newCourses[numcourses++] = x;
delete[] tempCourses;
tempCourses = newCourses;
}
答案 1 :(得分:0)
您的方法效率很低,因为每次输入新的string
时重新分配并复制以前输入的所有 <{1>} 。这使得string
个分配和n
个副本,每个副本可能需要另一个分配(足够长n*(n-1)/2
秒)。
相比之下,每次内存不足时,string
(你正在躲避)将分配的内存加倍。虽然这可能浪费一些内存,但它避免了许多重新分配和复制。此外,std::vector
还可以避免通过移动来复制std::vector
。
后一种优化实际上很容易通过
添加到您的代码中string