zoukankan      html  css  js  c++  java
  • C++ Primer 随笔 Chapter 9 顺序容器

     参考http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html

    1.。顺序容器:vector(快速随机访问);list(快速插入删除);deque(双端队列)

    2.顺序容器适配器:stack 后进后出,栈;queue 后进先出,队列;priority_queue 优先队列

    3. 初始化:

         a.  C<T> c: 创建名为c的空容器,适用于所有容器

         b.  C c(c2): 创建容器c2的副本,要求c与c2有相同的容器类型且容器内的元素类型也相同,适用于所有容器

         c.   C c(b,e): 迭代器b和e的范围内的副本,适用于所有容器

         d.  C c(n,t): 用n个值为t的元素初始化c容器,只适用于顺序容器

         e.  C c(n): 用n个值初始化元素的容器c,只适用于顺序容器

       f.    容器的容器: vector< vector<string> (这里一定要有个空格,否则就成了移位符>>了) >

    4.迭代器操作

           a.*iter:取值

           b.->:解引用,it->mem等效于(*it).mem

           c.++ --

           d.== !=

           e.以下操作只适用于vector和deque容器

                  (1). iter +/- n

                  (2). iter +/-=n

                  (3). iter1-iter2

                  (4). >,>=,<,<=

    5.容器定义类型别名:

           a.size_type 长度

           b.iterator, const_iterator,reverse_iterator,const_reverse_iterator 顺序、只读顺序、逆序、只读逆序迭代器

           c.difference_type 迭代器差值

           d.value_type 元素类型

           e.reference 元素类型左值类型,相当于 value_type &

           f.const_reference 常量左值,即const_value_type &

    6.容器操作

           a.begin() end() rbegin() rend():如果容器是const,则返回const_iterator

           b.添加元素

                  (1). push_back(t): 在容器c的尾部添加值为t的元素,返回void类型

                  (2). push_front(t): 在容器c的前端添加值为t的元素,返回void类型,只适用于list和deque容器

                  (3). insert(p,t): 在迭代器p所指向的元素前面插入值为t的新元素,返回所指向新添加元素的迭代器

                  (4). insert(p,n,t): 在迭代器p所指向的元素之前插入n个值为t的新元素,返回void类型

                  (5). insert(p,b,e): 在迭代器p所指向的元素前面插入由迭代器b和e标记的范围内的元素。返回void类型

           c.大小操作

                  (1). c.size() 返回容器c中的元素个数,返回类型为 c::size_type

                  (2). c.max_size() 返回容器c可以容纳的最多元素个数,返回类型为 c::size_type

                  (3). c.empty() 返回标记容器大小是否为0的布尔值

                  (4). c.resize(n) 调整容器大小为n,如果n小于原来的size则删除多出来的元素,否则,添加采用值初始化新的元素

                  (5). 调整容器的大小,时期能容纳n个元素,所有新添加的元素值都为t

      d.访问元素

             (1). c.back() 返回容器c的最后一个元素的引用,如果c为空则该操作未定义

             (2). c.front() 返回容器c的第一个元素的引用,如果c为空则该操作未定义

             (3). c[n],c.at(n)返回下标为n的元素的引用。如果下标越界,则该操作未定义

      f.删除操作

             (1) c.erase(p) 删除迭代器p所指向的元素,返回一个迭代器指向被删除元素的后面元素;如果p本身就是指向容器内的最后一个元素,则返回的迭代器指向容器超出末端的下一个位置。如果p本身就是指向超出末端的下一个位置的迭代器,则该函数未定义

             (2) c.erase(b,e) 删除迭代器b和e所标记范围内的所有元素,返回一个迭代器,只想被删除元素段后面的元素。如果e本身就是指向超出末端的下一个位置的迭代器, 则返回迭代器也指向容器的超出末端的下一个位置

             (3) c.clear() 删除容器c内的所有元素,返回void

             (4) c.pop_back() 删除容器c的最后一个元素,返回void。如果c为空容器,则该操作未定义

             (5) c,pop_front()  删除容器c的第一元素,返回void。如果c为空容器,则该操作未定义,只适用于list和deque容器

             (6) 删除操作回事迭代器失效

      e.赋值与swap

             (1). c1 = c2 删除c1容器的所有元素,然后将c2原来的元素赋值给c1.c1和c2类型(包括容器类型和元素类型)必须相同

             (2). c1.swap(c2) 交换内容:调用玩该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同

             (3). c.assign(b,e) 重新设置c的元素:将迭代器b和e标记的发内内所有的元素复制到c中。b和e必须不是只想c中元素的迭代器

             (4). c.assign(n,t) 将容器c重新设置为存储n个值为t的元素

    7.vector的自增长

           a.capacity和reserve

                 

           b.size值是当前的大小,capacity则指必须分配新存储空间之前可以存储的元素总数

           c.capacity>=size

    8. 容器选用(一般vector都是最佳的选择)

           a.随机访问:vector或deque

           b.中间插入或删除:list

           c.首尾插入或删除

           d.在读取时在中间插入,然后需要随机访问,可选用list,然后复制复制给一个vector

    9.再谈string

           a.构造string的其他办法

                  (1). string s(cp,n)初始化为cp的前n位副本

                  (2). string s(s2,pos2)创建s2从下标pos2开始的字符副本,如果pos2>s2.size(),此操作未定义

                  (3). string s(s2,pos2,len2) 创建s2从下标pos2开始长度为len2的副本

           b.修改string的其他方法

                  (1) s.insert(pos,n,c)在下标为pos的元素之前插入n个字符c

                  (2) s.insert(pos,s2)在下标为pos的元素之前插入string对象s2的副本

                  (3) s.insert(pos,s2,pos2,len) 在下标为pos的元素之前插入s2中从下标pos2开始的len个字符

                  (4) s.insert(pos,cp,len)在下标为pos元素之前插入cp所指向数组的前len个字符

                  (5) s.insert(pos,cp)在下标为pos的元素之前插入cp所指向的以空字符结束的字符串副本

                  (6) s.assign(s2)用s2的副本替换s

                  (7) s.assign(s2,pos2,len) 用s2中从下标pos2开始的len个字符串副本替换s

                  (8) s.assign(cp,len)用cp所指向数组的前len个字符副本替换s

                  (9) s.assign(cp) 用cp所指向的以空字符结束的字符串副本替换s

                  (10) s.erase(pos,len) 删除从下标pos开始的len个字符

                  注:上述操作除特殊申明,返回的都是s的引用

           c.只使用于string类型的操作

                  (1) s.substr(pos,n) 返回一个string类型的字符串,它包含s中从下表pos开始的n个字符

                  (2) s.substr(pos) 返回一个string类型的字符串,它包含从下标开始到s末尾的所有字符

                  (3) s.substr 返回s的副本

                  (4) s.append(args)

                  (5) s.replace(pos,len,args) 删除s中从下标pos开始的len个字符,用args制定字符替换之。返回s的引用。

                  (6) s.replace(b,e,args) 删除迭代器b和e标记的范围内所有的字符,用args替换之,返回s的引用

                  (7) args说明:

                        s2 :字符串s2

                        s2,pos2,len2 :字符串s2中从下标pos2开始的len2字符

                        cp :指针cp指向的以空字符结束的数组

                        cp,len2:cp所指向的以空字符结束的数组中前len2个字符

                        n,c:字符c的n个副本

                        b2,e2迭代器b2和e2标记的范围内所有字符

                        

           dstring类型的查找操作,返回类型为size_type

                  (1) find(args) 在s中查找args的第一次出现

                  (2) rfind(args) 在s中查找args的最后一次出现

                  (3) find_first_of(args) 在s中查找args的任意字符的第一次出现

                  (4) find_last_of(args) 在s中查找args的任意字符的最后一次出现

                  (5) find_first_not_of(args) 在s中查找第一个不属于args的字符

                  (6) find_last_not_of(args) 在s中查找最后一个不属于args的字符

                  (7) args说明:

                         c,pos:在s中下标pos标记的位置开始,查找字符c。pos的默认值为0

                         s2,pos:在s中,从下表pos标记的位置开始,查找string对象s2.pos的默认值为0

                         cp,pos在s中,从次啊表pos标记的位置开始,查找指针cp所指向的c风格的以空字符结束的字符串,pos的默认值为0

                         cp,pos,n:在s中:从下标pos标记的位置开始,查找指针cp所指向数组的前n个字符。pos和n都没有默认值

                  (8) string 上的操作区分大小写

           e. string比较操作:compare函数

                  (1)  s.compare(s2) 比较s和s2

                  (2)  s.compare(pos1,n1,s2)让s中从pos下标开始的n1个字符与s2进行比较

                  (3)  s.compare(ps1,n1,s2,pos2,n2) 让s中pos1下标位置开始的n1个字符与s2中从pos2下标位置开始的n2个字符作比较

                  (4)  s.compare(cp) 比较s和cp所指向的以空字符结束的字符串

                  (5)  s.compare(pos1,n1,cp) 参考(2)

                  (6)  s.compare(pos1,n1,cp,n2) 参考(3)

    10. 容器适配器:

       a. 将一个顺序容器指定为适配器的第二个类型实参,可覆盖默认基础容器,e.g. stack< string, vector<string> > str_stk;

       b.栈适配器

        (1) empty() 如果栈为空,则返回true,否则返回false

        (2) size()  返回栈中元素的个数

        (3) pop()  删除栈顶元素,但不返回其值

        (4) top()   返回栈顶元素但不删除钙元素

        (5) push(item)  在栈顶压入元素

       c.队列

        (1) empty()  同栈

        (2) size()  同栈

        (3) pop():删除队首

        (4) front():返回队首,不删除

        (5) back():返回队尾,不删除

        (6) push(item),队尾插入

       d.优先队列

        (1) empty() 同队列

        (2) size():  同队列

        (3) pop():  同队列

        (4) top(): 返回最高优先级的元素

        (5) push(item):基于优先级在适当位置插入新元素

     

  • 相关阅读:
    [原]openstack-kilo--issue(二) openstack auth error
    [原]关闭selinux
    [原]Failed to load SELinux policy. System Freezing ----redhat7or CentOS7 bug
    [转]Understanding OpenStack Authentication: Keystone PKI
    第七节:Core SignalR中的重连机制和心跳监测机制详解
    第八节:SQLServer函数大全(一)--字符串函数、数学函数
    第四节:SQLServer数据类型详解
    第三节:从多个角度分析顺序表和链表区别和特点
    第二节:线性表→顺序表→链表 逐个击破
    第一节:时间复杂度和空间复杂度
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/3315964.html
Copyright © 2011-2022 走看看