使用 STL 堆栈作为C++类的成员

Using the STL stack as a member of a C++ class

本文关键字:成员 C++ STL 堆栈 使用      更新时间:2023-10-16

我正在处理一个需要(单独)堆栈列表的项目。我创建了一个名为"stacklist"的类,就是堆栈列表。我希望类有一个指向列表头部的堆栈指针。但是,每当我尝试构建类时,我都会收到错误。

#ifndef STACKLIST_H
#define STACKLIST_H
#include <stack>
//source: Data Structures Using C++: Linked List Implementation Part II (List Class)
//url: http://www.youtube.com/watch?feature=endscreen&NR=1&v=7vZo17iv1zQ
class stacklist
{
    public:
        stacklist();
        void addToHead(const int&);
        void printList();
        void insert(const int&);
    private:
        stack<int>* head; //THIS IS WHERE I AM HAVING THE PROBLEM
        int size;
};

#endif // STACKLIST_H

错误消息是"错误:在'<'标记之前预期';"

任何

可以提供的见解将不胜感激。

标准库stack位于 std 命名空间中,因此您需要适当地限定名称:

std::stack<int>* head;

您应该考虑使用 std::list<std::stack<int>> 而不是您的类。

模板的正确名称是 std::stack

如果你想要的只是一个堆栈列表,你可以总是使用 std::list<std::stack<int>> ,顺便说一下(或者如果你只需要前向遍历,std::forward_list)。但是,即使您追求自己的设计,也可能没有理由不能使堆栈成为直接类成员。

也许你应该说std::stack

std::stack<int>* head;而不是stack<int>* head;

如果使用std库,则必须将std::放在 std 对象之前,或者在源文件的开头放置一个using namespace std

#include <stack>
using namespace std; // This line brings std stuff into the current namespace.

或:

std::stack<int>* head;

如果您的文件是标头,则第一个比第二个更好,因为 using 指令将分布到包含 StackList.h 的所有文件中

这个问题

没有提到,但我认为值得一提:在类中使用指针是非常危险的,因为您必须在所有构造函数(默认和复制)中处理它并注意析构函数。

修改你的类分配,并考虑是否可以使用 std::stack 实例而不是std::stack指针。