stl:standard template library ==> vector,map等均为类模板(class template)而不是类
vector,map才是类

container:

iterator:vector和string提供随机访问迭代器,其他stl不提供随机访问迭代器

  • 随机访问迭代器支持iterator+constant 其他迭代器不支持iterator+constant
  • 均支持it++和*it

迭代器.PNG

公共的东西:

  • 默认创建,拷贝创建,=,默认析构函数(big three)
  • 状态:empty(), size()
  • swap可交换绝大多数stl(好像除了不可交换string)(这里的swap可能是stl自带的方法)
  • 常提供的方法:插入insert 删除erase clear 查找find

1. string & vector

string

  • string::npos(no position):unsigned int,值为-1或者4294967295

创建:

  • 默认构造
  • 拷贝构造:string s(“hello”)
  • string s(int n, char c)

赋值:

  • =
  • assign —-> s[i] = …更为简单

运算:+ += > < >= <=
遍历:
访问:s[i]
操作:

  • substr
    • substr(pos, len)
    • substr(len)
  • insert
  • erase clear
  • find replace
    • find(str2) find(str2, pos)

状态:empty() size()

vector:vector的动态拓展是开一块新的空间,然后将原有数据拷贝进去,而不是直接增加一块区域从而进行拓展

创建:默认构造,拷贝构造

  • vector v(v0.begin(),v0.end()-1)
  • vector v(n, elem) :n个elem,初始化后从而能够进行随机访问
    • vector v(elem):elem个elem

赋值:

  • =
  • v.assign(begin, end) —-> v[i] = … 更为简单
  • v.assign(n, elem) —-> v[i] = … 更为简单

遍历:
访问:v[i]
操作:

  • push_back pop_back
  • insert
  • erase clear
  • 没有提供find方法

状态:empty(), size()


2. set & map

set:自动排序,吸收重复元素(集合)

multiset:自动排序,可以有重复元素

创建:默认构造,拷贝构造
赋值:= swap(s1,s2)
遍历:
操作:

  • insert
  • erase clear
  • find

状态:empty(), size()

pair:对组

创建:默认构造,拷贝构造
更常用的构造方式
pair p1(0,”tom”)
赋值:=
运算:== != < > <= >=,先比first,再比second
操作:

  • it->first, it->second

map:按key自动排序,字典(哈希表),吸收重复元素

multimap:按key自动排序,字典,可以有重复元素

创建:默认构造,拷贝构造
赋值:= swap(m1,m2)
遍历:
操作:

  • insert
  • erase clear
  • find

状态:empty(), size()

unordered_map

template - 图2


3. stack & queue

stack

创建:默认构造,拷贝构造
赋值:=
遍历:for(auto(stack::iterator) it = s.begin(); it != s.end(); it++){}
操作:

  • push(),pop()
  • top()

状态:empty(),size()

queue

创建:默认构造,拷贝构造
赋值:=
遍历:
操作:

  • push(),pop()
  • front(),back()

状态:empty(), size()

priority_queue