【发布时间】:2021-08-04 13:29:29
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
class Stack{
public:
vector<string> vc;
int length=0;
void peek(){
if(vc.size()==0){
cout<< "The stack is empty"<<endl;
}
cout<< vc[length]<<endl; //----> does not work;
//cout<<vc[vc.size()-1]; ---> does not work either
//cout<<vc.end(); ----> does not work either;
}
void add(string value){
vc.push_back(value);
length++;
}
void pop(){
vc.erase(vc.end());
length--;
}
void show(){
for (int i=0;i<vc.size();i++){
cout << vc[i] << " ";
}
cout<<endl;
}
};
int main()
{
Stack mystack;
mystack.peek();
mystack.add("Hello");
mystack.peek();
mystack.add("frands");
mystack.add("chai");
mystack.add("pee");
mystack.add("lo");
mystack.show();
mystack.peek();
mystack.pop();
mystack.show();
}
问题 1-> 问题出现在 peek() 函数中,我无法访问向量空间中的最后一个元素,返回时出现分段错误(核心转储)错误。
问题 2-> 并且在将这段代码粘贴到堆栈溢出时,我不得不在每个代码行中手动添加 4 个空格,如何一步一步执行此操作(对不起,这是一个愚蠢的问题)。
【问题讨论】:
-
vc[length]将始终超出向量的范围。请记住,向量索引(就像数组索引一样)是基于 零 的。因此,具有length元素个数的向量将具有0到length - 1范围内的索引。 -
另外,您实际上并不需要
length变量,因为向量本身会跟踪其“长度”。要获取向量的最后一个元素,请使用back函数。 -
最后你的
pop函数将不起作用。 -
当
vc.size()==0在peek函数中时,您必须添加更多语句以防止访问vc的元素。 -
要了解数组索引,请尝试数手指。从零开始。假设你有 10 根手指,那么最后一根手指应该是 9 号。10 号手指去哪儿了?