如何修复使用变量初始化数组时出错
how to fix Error in initializing an array using a variable?
我正在尝试使用数组实现堆栈。这就是我在我的头文件。我计划在构造函数中将值分配给 maxsize。但是,我不断收到错误。我该如何解决这个问题?
class stack {
private:
const int maxsize;
int arrays[maxsize];
int top;
public:
stack();
void additem(int);
void print();
};
一个好的解决方法是:
class stack
{
std::vector<int> arrays;
int top;
public:
stack(int maxsize) : arrays(maxsize), top(0) {}
};
这样,您就没有任何内存管理错误的可能性;您的类在复制、移动、交换等时行为正常,并且您的代码非常简单。
具有最小内存占用的替代方法是:
class stack
{
std::unique_ptr<int[]> arrays;
int maxsize;
int top;
public:
stack(int maxsize) : arrays(new int[maxsize]), maxsize(maxsize), top(0) {}
};
这个版本是可移动的,但在复制时会出现编译错误(与使用原始指针的其他一些建议相反,原始指针将成功编译,然后在运行时导致内存损坏)。 要使此类可复制,您需要编写自己的复制构造函数和复制赋值运算符。
C++不允许
可变长度数组。您可以使用指针和动态分配代替数组。
要初始化 const
成员,您必须在构造函数的初始值设定项列表中执行此操作。
class stack {
private:
const int maxsize;
int *arrays;
int top;
public:
stack(int max = 10) : maxsize(max) {
arrays = new int[max];
top = 0;
}
void additem(int);
void print();
};
请参阅如何在构造函数中初始化常量字段?
然后,您还需要一个执行delete[] arrays;
的析构函数。
但是,与其使用 C 样式数组,您可能会发现使用 std::vector<int>
更容易。这不需要首先指定最大长度,它将根据需要扩展。
当然,您可以跳过整个练习并使用std::stack<int>
。
如果你想让maxsize
总是10,你可以做这样的事情:
class stack {
private:
static const int maxsize = 10;
int arrays[maxsize];
...
请注意,我已经将maxsize
设为静态。 对于 stack
的所有实例,它都是相同的,并且在编译时定义。 因此,您可以将其用作数组大小。
如果您希望maxsize
是可变的,则需要使用动态分配:
class stack {
private:
const int maxsize;
int* arrays;
...
public:
stack(int maxsize) : maxsize(maxsize), arrays(0) {
arrays = new int[maxsize];
}
~stack() { delete[] arrays; }
...
请注意,此处必须删除动态分配的内存。 通常执行此操作的地方是析构函数。 如果你想走这条路,你也可以使用std::vector<int>
并完全摆脱maxsize
。 这使您不必进行任何手动内存管理。
相关文章:
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 将链表转换为指针数组时出错
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 基于数组的列表 - 动态数组创建时出错
- 从斐波那契序列 c++ 中的数组中查找正确的元素时出错
- 分段 使用 MPI_Gather 收集字符数组时出错
- 读取字符串字符时出错 - 对于数组中的字符串值
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 在 c++ 中返回一维数组时出错
- 将 2D 数组传递给 C++ 中的函数时出错
- 在 c++ 上创建动态数组时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 将 find_if() 与数组一起使用的代码段中出错
- 在比较特定输入中的程序的数组中出错
- 分段 填充数组时出错
- 数组作为函数参数查找数组长度时出错
- C++:用户定义的类型数组出错
- C++中的数组出错
- 我正在创建精灵数组出错
- 在将代码从Windows移植到Linux时删除数组出错