gpt4 book ai didi

c++ - 在C++中使用 vector 实现堆栈

转载 作者:行者123 更新时间:2023-12-01 15:11:19 26 4
gpt4 key购买 nike

#include<iostream>
#include<vector>
using namespace std;
class Stack {

private:
int maxSize;
vector<int> v;
int top;
public:
Stack(int size) {
this->maxSize = size;
this->v.reserve(this->maxSize);
this->top = -1;
}

void push(int j) {
if (!(this->isFull())) {
this->v[++this->top] = j;
} else {
cout << "stack is full"<<endl;
}

}

int pop() {
if (!(this->isEmpty())) {

return this->v[this->top--];
} else {
cout << "\nstack is empty"<<endl;
cout<< "StackOverflow "<<endl;
}
}

int peak() {
return this->v[this->top];
}
bool isEmpty() {
return (this->top == -1);
}

bool isFull() {
return (this->top == this->maxSize - 1);
}

};

int main() {

Stack s(10);

s.push(10);
s.push(20);
cout<<s.pop();
cout<<"\n"<<s.pop();
s.push(40);
cout<<"\n"<<s.pop();

}

由于以下原因,如何使此代码更好,更可靠:
  • 该代码的输出为20 10 40。
  • 但是在输出中,我想在每次输出后打印“Stack is empty”
    从堆栈中弹出所有元素之后的时间
    堆栈
  • 每次都无法打印“Stackis Empty”
  • 最佳答案

    您的代码中包含UB:

    this->v[++this->top] = j;

    return this->v[this->top--];

    等等。您在 std::vector中保留空间的事实并不使访问大量元素合法,您无法访问元素。而且您使代码过于复杂- std::vector保持其大小,因此根本不需要索引 top。您所需要做的就是添加 push_back()添加元素,并使用 back()访问最后一个元素,然后使用 pop_back()将其删除。您可以使用 std::vector>::empty()std::vector::size()来检查是否还有元素。

    关于c++ - 在C++中使用 vector 实现堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52556611/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com