目录
1.类模版只能显示实列化
什么是类模板:
#include <iostream>
#include <vector>
using namespace std;
template<class T>
class Stack
{
public:
Stack(int capaicty = 4)
{
_a = new T[capaicty];
_top = 0;
_capacity = capaicty;
}
~Stack()
{
delete[] _a;
_capacity = _top = 0;
}
private:
T* _a;
size_t _top;
size_t _capacity;
};
int main()
{
Stack<int> st1; // int
Stack<double> st2; // double
vector<int> v;
for (size_t i = 0; i < v.size(); ++i)
{
cout << v[i] << " ";
}
return 0;
}
可是遇到个难理解的:
namespace bit
{
template<class T>
struct list_node
{
list_node<T>* _next;
list_node<T>* _prev;
T _data;
list_node(const T& x = T())
:_next(nullptr)
, _prev(nullptr)
, _data(x)
{}
};
...
这里list_node<T>* _next的list_node<T>*是个啥啊当时听不懂。
这是两个结构体指针,因为有用类模板,所以结构体的类型需要写个<>来指定类型
就类似vector<>这里指定类型喽
前面带了template了就不是普通的结构体了
2.const int*不能传给int*,权限放大了
这里const修饰的是*this,也就是指向的内容
保护的是我能加加,但不能修改我指向的数据
T实例化为int,T&就会实例化为int*
3.对迭代器->的重载
看下面就懂了
(理解复杂的类与模版与重载)
回忆一下++的重载: