我目前正在尝试使用堆栈向量实现一个类。该类应作为其他对象的堆栈,但在内部将数据分发到最大大小的不同堆栈。如果堆栈已满,则会创建一个新堆栈并将其推送到内部向量。
感谢。
示例代码:
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
template <class T>
class SetOfStack {
public:
SetOfStack( int max_size ): current_stack(0), max_stack_size(max_size) {
stacks.reserve(10);
stacks.push_back( new stack<T> );
}
~SetOfStack() {
stacks.clear();
}
void push( T value ) {
stacks[current_stack].push(value);
if(stacks[current_stack].size() > max_stack_size) {
stacks[current_stack].push_back(new stack<T>);
current_stack++;
if(current_stack % 10 == 0 && current_stack > stacks.size()) {
stacks.reserve(stacks.size() + 10);
}
}
}
T pop() {
T value = stacks[current_stack].top();
stacks[current_stack].pop();
if(stacks[current_stack].size() == 0 && current_stack != 0 ) {
stacks[current_stack].pop_back();
current_stack--;
}
}
T popAt( int index ) {
T value = stacks[index].top();
stacks[index].pop();
}
private:
int current_stack;
int max_stack_size;
vector< stack<T> > stacks;
};
int main() {
// Test code
SetOfStack<int> s_o_s(3);
s_o_s.push(1);
cout << s_o_s.pop() << endl;
return 0;
}
解决方案:问题是new
中的push_back
是不必要的,因为向量已经分配了内存。
另一个错误是我写了stacks[current_stack].push_back(new stackT>());
它只是stacks.push_back(stackT>());
答案 0 :(得分:5)
你得到的错误是这一行:
stacks.push_back( new stack<T> );
以及这一行:
stacks[current_stack].push_back(new stack<T>);
因为您已将堆栈声明为非指针:
vector< stack<T> > stacks;
因此,您只想使用stack<T>()
代替new stack<T>
此外,std::stack
没有push_back
功能,您需要使用push
。
stacks.push_back(stack<T>());
stacks[current_stack].push(value);
以及pop
而不是pop_back()
:
stacks[current_stack].pop();
此时,您不再需要我在原始评论中提及的删除,因为您似乎不打算致电new