几种特殊C++语法
- 临时对象
template <typename T>
class print
{
public:
void operator()(const T& elem)
{ cout << elem << ' '; }
};
//使用:
print<int>(5); //输出 5
increment/decrement/dereference 操作符重载
`class INT
{
public:
INT(int i):m_i(i){};
//++前缀
INT& operator++()
{
++this->m_i;
return *this;
}
//++后缀
const INT operator++(int)
{
INT temp = *this;
++ (*this);
return temp;
}int& operator*() const { return (int&)m_i; } ostream& operator<<(ostream& os,const INT& i) { os<<m_i; return os; }
private:
int m_i;
};
`- 仿函数
函数有一个缺点就是没有自己的状态信息
仿函数定义:
template <class T>
struct plus {
T operator()(T& x,T& y) const {return x+y;}
};
//使用:
plus(3,4);
空间配置器
迭代器
容器和算法分开设计,分别泛型化
1. 迭代器设计
迭代器本质就是指针,重载operator* 和 operator->
/* auto_ptr */
template<class T>
class auto_ptr {
public:
explicit auto_ptr(T *p = 0):pointee(p){}
template<class U>
auto_ptr<T>& operator=(auto_ptr<U>& rhs){
}
T& operator*() const {return *pointee;}
T* operator->() const {return pointee;}
private:
T* pointee;
};
2. traits编程
1. value type
类型
2. difference type
两个迭代器之间的距离
3. reference type
4. pointer type
5. iterator_category
1. Input Iterator 只读
2. Output Iterator 只写
3. Forward Iterator 读写
4. Bidirectional Iterator 可双向移动
5. Random Access Iterator 随机取值
序列式容器
- vector
线性空间,容量capacity()>=size() - list
双向链表 - deque
双向开口连续性空间,分段连续空间组合而成,有个map的映射表指向另一段连续性空间。可在首尾插入和删除
- stack
FILO,一般以deque来实现,也可以list来实现。 - queue
FIFO,底端加入元素,顶端取出元素。list实现 - heap
priority queue.插入的时候排序。
使用完全二叉树。 - priority_queue
- slist
单向链表。