C++ 堆栈模板

标签 c++ pointers stack

我为我的类制作了一个模板来模拟堆栈的基本功能,但我收到了一个错误,但我不知道如何修复它。

我的代码:

#using <mscorlib.dll>
using namespace System;
using namespace System::IO;

#include <iostream>
#include <vector>
using namespace std;

template<class T> 
class stack
{
    vector<T> *v;
    int n;
public:
    stack(int,vector<T>*);
    ~stack();

    void push(T);
    void pop();

    void afis();
};

template<class T> 
stack<T>::stack(int x, vector<T> *y)
{
    x = n;
    y = v;
}

template<class T> 
stack<T>::~stack()
{
}

template<class T> 
void stack<T>::push(T item)
{
    v->push_back(item);
}

template<class T> 
void stack<T>::pop()
{
    v->pop_back();
}

template<class T> 
void stack<T>::afis()
{
    typedef vector<T>::iterator it;
    for(it i = v->begin(); i != v->end(); ++i)
        cout << *i << " ";
}

int main()
{
    int n, nr;
    cin >> n;

    vector<int> v;
    for(int i = 0; i < n; i++)
    {
        cin >> nr;
        v.push_back(nr);
    }

    stack<int> st(n, &v);

    st.pop();
    st.afis();
}

错误发生在运行时,它表示它访问了不应该访问的内存。 另外我想知道是否可以通过类似 stack *st = new stack(n, &v) 的指针来声明我的堆栈。这可能吗?

最佳答案

你的构造函数完全是倒退的:

template<class T> 
stack<T>::stack(int x, vector<T> *y)
{
    n = x;
    v = y;
}

关于C++ 堆栈模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964081/

相关文章:

c++ - 我在哪里删除对象?我不在范围内

c++ - 模板类型的重载决议和运算符<<的问题

python - python-C++扩展能否获取C++对象并调用其成员函数?

c# - 使用 memcpy 从 C++ 到 C#

c++ - 我是 c++ 的新手,你能解释一下这个例子中的指针吗

r - R内部的通用 "classes"

c++ - 如何将 'descending panel' 附加到 QMainWindow 中菜单栏的底部

c++ - 更改帮助窗口的大小以适合文本

c - 使用 printf 打印一个空指针给出 (nil) 但打印 &ptr 给出一个地址。为什么?

C++ 函数返回在堆栈上创建的对象