非静态数据成员初始值设定项仅适用于 和动态内存
Non-static data member initializers only available with and dynamic memory
我有2个问题。
第一:
警告:非静态数据成员初始值设定项仅适用于 -std=C++11 或 -std=GNU++11
第二:
如何将此代码转换为具有动态内存的代码?
#include iostream
#include stdio.h
#include stdlib.h
#include time.h
using namespace std;
#define MAX 20
class tStack{
int STACK[MAX];
int sizee=0;
public:
bool empty(){
return sizee==0;
}
int val(){
if (sizee==0) throw "Stack is empty";
return STACK[sizee];
}
int pop(){
if (sizee==0) throw "Stack is empty";
return STACK[sizee--];
}
void push(int co){
if (sizee==MAX-1) throw "Stack is full";
sizee++;
STACK[sizee]=co;
}
void writeTop(){
cout<<val()<<endl;
}};
int main(){
tStack stack;
try{
stack.push(4);
stack.push(8);
stack.push(5);
cout<<endl;
cout<<stack.pop()<<endl;
cout<<stack.pop()<<endl;
cout<<stack.pop()<<endl;
cout<<stack.pop()<<endl;
}catch (const char *msg){
cout<<"exception: "<<msg<<endl;
}
return 0;
}
如何将此代码转换为具有动态内存的代码?
我猜你的意思是用动态容器替换固定大小的数组int STACK[MAX];
。
使用std::vector
:
std::vector<int> stack
其余的你应该自己弄清楚。
此外,C++标准库也有一个堆栈容器适配器,但我假设您需要出于教育目的创建自己的容器适配器。
对于警告,您可以在以下代码块中检查 -std=c++11 标志: 设置 -> 编译器 并选中Have g++ follow the C++11 ISO C++ language standard
选项。
对于动态内存,必须使用 malloc/calloc 或 new 来分配内存。为您的堆栈创建一个结构,类似于 struct elem { int info, struct elem *previous};
当你必须推送某些东西时,为新元素分配内存,向堆栈添加值并将最后一个值链接到新值。
newElem = new elem;
elem -> info = info;
elem -> previous = topOfTheStack;
现在 topofTheStack
newElem
,所以topOfTheStack = newElem
;
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 选择排序C++(已修改)并非适用于所有情况
- 无法让"std::enable_if"适用于无作用域枚举
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 确定夏令时是否适用于特定日期
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- C++带有适用于左值和右值的引用参数的函数
- 代码适用于调试,但不适用于发布
- C++17 和更新的 std::分配器是否适用于动态数量的自定义堆?
- 适用于大型数组的无复制线程安全环形缓冲区
- NRVO 是否也适用于协程?
- 约束包容是否仅适用于概念?
- 非静态数据成员初始值设定项仅适用于 和动态内存
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- OpenMP原子是否适用于行、变量名或实际内存地址
- delete[]操作符是否适用于通过指针返回的动态分配的内存?
- 内存分析工具,适用于使用c#、c++ /CLI和非托管c++的应用程序