在c++中将静态数组复制到动态数组
Copying a static array to a dynamic array in c++
我正在尝试编写一个方法,创建一个课程,并将其添加到SRS的静态数组中。然而,我的代码没有给出任何错误,但根本没有添加课程。我做错了什么?顺便说一下,球场是动态阵列。
这个代码现在是正确的:
#include "StudentReviewSystem.h"
StudentReviewSystem::StudentReviewSystem()
{
numberOfCourses = 0;
courses = new Course[0];
}
void StudentReviewSystem::addCourse( const int courseId, const string courseName )
{
int i = findCourse( courseId );
if ( i == -1 )
{
int newNum = numberOfCourses + 1;
Course *newCourses = new Course[newNum];
for ( int j = 0; j < numberOfCourses; j++ )
{
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete []courses;
courses = newCourses;
numberOfCourses = newNum;
cout<< "Course added"<< endl;
}
i = findCourse(courseId);
cout<< i;
}
谢谢大家的帮助!
代码中有几个错误。在C++中,当变量被声明为数组时,数组的大小应为cobstat表达式。因此此语句是无效的
Course newCourses [newNum];
在C/C++中,数组没有赋值运算符。所以这个代码也是无效的
courses = newCourses;
此外,您忘记更改varaibale numberOfCourses的值。Shpuld为
numberOfCourses = newNum;
此外,您可能不会在C/C++中放大数组。
应该动态分配内存,而不是使用数组。所以课程应该被定义为
Course *courses;
考虑到其他必要的变化,功能将以以下方式呈现
void StudentReviewSystem::addCourse( const int courseId, const string courseName )
{
int i = findCourse( courseId );
if ( i == -1 )
{
int newNum = numberOfCourses + 1;
Course *newCourses = new Course[newNum];
for ( int j = 0; j < numberOfCourses; j++ )
{
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete []courses;
courses = newCourses;
numberOfCourses = newNum;
cout<< "Course added"<< endl;
}
i = findCourse(courseId);
cout<< i;
}
Course newCourses [newNum];
这不是有效的C++。newNum
应该是一个编译时常数。
另外,我不认为可以直接将两个静态数组等同起来。
courses = newCourses;
相反,使用for循环来分配单个元素,或者更好地使用std::vector
。
尝试以下代码:
if(i == -1) {
int newNum = numberOfCourses + 1;
Course* newCourses = new Course[newNum];
for(int j = 0; j < numberOfCourses; j++) {
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete [] courses;
courses = new Course[newNum];
for(int j = 0; j < newNum; j++) {
courses[j] = newCourses[j];
}
delete [] newCourses;
cout<< "Course added"<< endl;
}
int newNum = numberOfCourses + 1;
Course newCourses [newNum];
是不合法的c++,在您的情况下不需要从任何数组复制到另一个数组。只需使用std::vector
作为类的成员,并使用其push_back
方法。
你的老师向你解释了不使用std::vector
的原因吗?如果没有,你最好自己思考,尽最大努力生产出好的软件,而不是黑客。实现一个动态大小的容器是可能的。如果这是家庭作业,那么就不需要编写StudentReviewSystem
类,而是集中精力实现一个动态大小的数组。如果没有,那么你不应该一次重新发明两个轮子,而是专注于其中一个——StudentReviewSystem
,并使用std::vector
。
您可以使用new []
:在堆上创建数组
Course* newCourses = new Course[newNum];
然后像你已经做的那样复制并添加新课程。别忘了delete
老球场阵列
delete [] courses;
courses = newCourses;
并更新numberOfCourses
(我认为这是您的错误)
numberOfCourses = newNum;
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 将字符数组复制到 QByte 数组中,而无需传递指针
- std::transform 将一个结构数组复制到另一个结构数组
- 如何使用指针C++将元素从2D数组复制到1D数组
- 如何将 int4 数组复制到 int8 向量中
- 如何将多维字符数组复制到字符 * 中
- std::将三维数组复制到三维向量中
- 为什么我不能将 C 样式数组复制到 std::array?
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 为什么当我想将(使用 memcpy)结构数组复制到字符数组时,字符数组为空
- 如何将数据从数组复制到C++特征矩阵或向量
- 将数组复制C++作为特征矩阵的向量
- 如何在 c++ 中将数组复制到文件
- 如何将对象数组作为构造函数中的参数传递,然后将传递的数组复制到另一个数组(仍在构造函数中)
- CUDA 将大于线程计数的数组复制到共享内存
- 可以使用 std::copy 将 3D 数组复制到矢量
- 如何在C++中将本地字符串数组复制到私有成员字符串数组
- 如何使用 std::copy 将一个 constexpr 数组复制到另一个 constexpr 数组
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较