【发布时间】:2018-09-11 08:53:49
【问题描述】:
我正在使用数组构建堆栈(不允许使用 std::vector),并且我必须实现一个用作构造函数的全局方法。输入参数是两个迭代器(开始和结束),我必须从中创建一个堆栈。问题是,在我实际创建堆栈之前,我必须检查是否为空。由于我不能将堆栈作为参数传递,我应该如何调用它的方法?
这是我的代码:
template <typename IterT>
void method(IterT begin, IterT end) {
try {
if(!is_empty())
make_empty();
for(; begin!=end; ++begin) {
push(static_cast<T>(*begin));
}
}
catch(...) {
clear();
throw;
}
}
显然不起作用,方法 is_empty()、make_empty()、push() 和 clear() 需要处理。
我的测试方法是:
int a[5] = {7, 2, 33, 4, 1111};
stack<int> sp;
sp.push(25); //check if stack is made empty
sp.print();
sp.method(a, a+5);
sp.print();
【问题讨论】:
-
如果
begin == end则中间没有元素 -
@user463035818 不,我不是在问方法是否正确,我是在问如果堆栈不是方法中的参数,我应该如何调用堆栈上的方法
-
顺便说一句,您的前提似乎很随意。我可以理解您不能使用
std::vector,但是为什么它必须是充当构造函数而不是构造函数的免费方法?为什么不能将堆栈传递给方法? -
那么这个问题比我最初想象的还要不清楚;)。如果你不能传递堆栈,那么你就不能调用它的方法。
-
鉴于限制,没有其他方法可以让
stack<int> sp成为全局变量。