c++ stl

Posted on 2024-05-21 23:57  woc0x00008279  阅读(4)  评论(0编辑  收藏  举报

《c++标准程序库》:

  chapter5:

    map和multimap除了常规的使用中括号赋值,还可以使用成员函数insert插入一个pair,如 dict.insert(std::make_pair(key,value))  P90  ,使用其iterator解引用得到的也是pair,所以it->first是key,it->second是value.  (P91);  像map和set这类的非顺序容器在插入时似乎会自动排序,这时候从begin到end遍历时按从小到大输出值

    迭代器分为双向迭代器和随机存取迭代器,后者包括vector, deque, string。 后者可以使用下标随意访问,而且能支持对迭代器的算术运算,如  it+1而不仅仅是 it++,而且还能够使用  it<a.end()而不仅仅是  it != a.end()   P99   ;     对于无法使用<直接比较迭代器的容器类型,我们可以使用一种新的技巧:看先找到it1的位置,再从begin到it1进行寻找看能不能找到it2   (P100)

    部分区间算法: equal ( it1.begin, it1.end(), it2.begin() ),从it1.begin和it2.begin()开始,比较若干个元素,如果都相等则返回true ; copy和equal的参数类型一样,将一个区间拷贝到另一个区间(注意保证第二个区间大小足够),并不一定指向同一种容器,如vector和deque性质相似,可以互相copy; 使用成员函数resize()可以调整大小, 如 a.resize(8),可能会截断,也可能会扩充(第二个参数可选,表示扩充部分的赋值);有些容器可以再赋值时指定大小如vector a(8, 7),8个元素都是7

    Warning : 当容器的某一个位置数据删除了,指向该位置的iterator也失效了,不能再引用;而且即使在删除前将此处iterator++也未必能够指向原本的下一个元素,因为删除某一个元素有可能导致其他某些元素的位置也发生改变(如Set)