我正在创建一个自定义类Stack来存储几个字符串变量。当我尝试打印堆栈时,它表示堆栈始终为空,这是不正确的。我使用向量来表示自定义堆栈,所以我的打印方法的方式应该工作,但由于某种原因它不会。我的错误是什么?是在我的std::vector
方法中吗?
isEmpty
答案 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;
v
与v
成员变量不同。本地v
为空,因此您的循环永远不会打印。
此外,使用描述性变量名称。使用单个字母变量名称(例如v
)不是一个好主意。
此外,关于通过引用或副本返回向量,请参阅此问题和答案:Returning vector copies.
那么你想要返回一个向量的副本,还是想要返回实际的向量?如果是后者,则返回引用,如果它是前者,则返回副本(如当前代码所做的那样)。请注意,返回副本而不是返回引用会产生影响(如链接所示)。