template

template<typename T>
T square(T x){
    return x * x;
}

大大减少了代码量, 不必为了多种数据类型创建相似的函数, 模板函数可以自动推导实参类型, 但是模板类能推导, 所以创建模板类实例需要指定T.

iterator

行为类似指针, 通过它能遍历容器

vector中iterator示例

vec.end()未定义, 所以不能访问.

algorithms

并不直接作用在容器上, 而是为iterator服务.

containers

  • Sequence containers
    • vector
    • deque
    • list
    • forward list
    • array
  • Associative containers
    • set, multiset
    • map, multimap
  • Unordered containers
    • Unordered set/multiset
    • Unordered map/multimap

sequence container

  • vec[idx]无范围检查/vec.at(idx)有范围检查, 抛出range_error

遍历

for(int i; i < vec.size(): i++)
    //anything else
for(auto i = vec.begin(); i != vec.end(); i++)
    //anything else
for(auto i : vec) //c++ 11
    //anything else

common member functions

  • empty: 判空
  • size
  • clear: 清空
  • swap: 交换内容物
  • insert
  • erase

vector特性

  • 头插慢
  • search慢

Deque特性

  • 中间插入满
  • search慢

list特性

  • 插入快
  • 不能随机访问
  • search慢

待更新