C ++自定义堆栈打印问题

时间:2015-11-22 18:28:46

标签: c++

我正在创建一个自定义类Stack来存储几个字符串变量。当我尝试打印堆栈时,它表示堆栈始终为空,这是不正确的。我使用向量来表示自定义堆栈,所以我的打印方法的方式应该工作,但由于某种原因它不会。我的错误是什么?是在我的std::vector方法中吗?

isEmpty

2 个答案:

答案 0 :(得分:2)

您将使用

返回基础矢量的副本
std::vector<std::string> stack::getVector();

这会导致stack::getVector().push_back(n);之类的所有调用都不对stack::v进行修改,而是修改返回的临时值。

我不明白,为什么你不应该直接在成员函数中使用v

v.push_back(n);

或者,如果您不想这样做(由于某种原因),make getVector将返回const-to-const和reference-to-non-const:

std::vector<std::string> const& stack::getVector() const { return v; };
std::vector<std::string> &stack::getVector()             { return v; };

请注意,您正在打破std::vector<std::string> &返回重载的封装。

答案 1 :(得分:1)

您正在此处创建一个本地变量:

void stack::printStack(){

      std::vector<std::string> v;

vv成员变量不同。本地v为空,因此您的循环永远不会打印。

此外,使用描述性变量名称。使用单个字母变量名称(例如v)不是一个好主意。

此外,关于通过引用或副本返回向量,请参阅此问题和答案:Returning vector copies.

那么你想要返回一个向量的副本,还是想要返回实际的向量?如果是后者,则返回引用,如果它是前者,则返回副本(如当前代码所做的那样)。请注意,返回副本而不是返回引用会产生影响(如链接所示)。