C++堆栈模板
C++ stack template
我为我的类制作了一个模板来模拟堆栈的基本功能,但我遇到了一个错误,我不知道如何修复它。
我的代码:
#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;
}
您的作业是向后的。
template<class T>
stack<T>::stack(int x, vector<T> *y)
{
x = n;
y = v;
}
CCD_ 1和CCD_。它们的值是未定义的。
在编译时,可以使用初始化列表提醒您注意这些错误。
template<class T>
stack<T>::stack(int x, vector<T> *y)
: n(x), v(y)
{
}
构造函数中的赋值语句是向后的。
举个例子,假设我们有这样的类(这个类和你的类的区别是我删除了n
变量,而我在向量v
上没有指针)
template<class T>
class stack
{
vector<T> v;
public:
stack(int,vector<T>*);
~stack();
void push(T);
void pop();
void afis();
};
如果您尝试在变量v上不使用指针,那么您必须使用构造函数初始化列表,正如位掩码告诉您的那样。若并没有编写构造函数初始化列表,那个么就会出现编译错误。这是因为向量类有自己的构造函数,必须在stack
类构造函数的主体之前执行,而唯一的位置是构造函数初始化列表。所以它会像:
template<class T>
stack<T>::stack():v(0)
{
}
这意味着您创建了具有0个元素的向量。
我认为,如果你尝试在main之外的其他函数中使用它,你的类就不会工作得那么好,但别介意!
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- C++ 在堆栈中包含多态属性的类对象存储
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 在 C++ 中使用链表进行堆栈
- 变量周围的堆栈'...'已损坏
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++线程的可用堆栈大小