zoukankan      html  css  js  c++  java
  • Chapter9(顺序容器) --C++Prime笔记

    PS:删除元素的成员函数并不检查其参数。在删除元素之前,程序员必须确保它们是存在的。

    1.迭代器的范围是[begin,end)左闭右开。

    2.对构成迭代器的要求:
    ①它们指向同一个容器中的元素或者容器的最后一个元素之后的位置。
    ②end不在begin之前。

    3.当将一个容器初始化为另一个容器的拷贝的时候,两个容器的容器类型和元素类型都必须相同。但是,当传递迭代器参数来拷贝一个范围的时候,新容器和原容器中的元素类型也可以不同,只要能将要拷贝的元素转换为要初始化的容器的元素类型就可以了。

    4.为了使用array类型,我们必须同时指定元素类型和大小

    5.虽然我们不能对内置数组类型进行拷贝或对象赋值操作,但是对于array没有限制(需要赋值号左右两边的运算对象必须具有相同的类型,另外不允许用花括号包围的值列表进行赋值)。

    6.顺序容器定义了一个名为assign的成员,允许我们从一个不同但是相容的类型赋值,或者从容器的一个子序列赋值。
    ps:由于其旧元素被替换,因此传递给assign的迭代器不能指向调用assign的容器。

    7.①由于swap操作不对任何元素进行拷贝,删除或者插入操作,因此这个操作很快。(这个操作只是交换了两个容器内部的数据结构,但是对于数组来说的话,就是真的会交换其中的元素。
    ②交换array后,指针,引用,和迭代器所绑定的元素保持不变,但是元素值已经在另一个array中对应的元素的值进行了交换。
    ③string交换后会导致迭代器,引用,指针失效。

    8.每个容器类型都支持相等运算符:除了无序关联容器以外所有的容器都支持关系运算符。

    9.除了push_back,list和forward_list,deque容器还支持名为push_front的类似操作。
    ps:deque除了像vector一样有随机访问元素的能力外,还提供了vector不支持的push_front.

    10.关于插入函数insert,第一个参数为一个迭代器,将元素插入到这个迭代器所指向元素的位置之前。
    ps:将元素插入的vector,string,deque中的任何位置都是合法的,但是这样做会很耗时。
    该迭代器不能指向自己。

    11.emplace函数在容器中直接构造元素。传递给amplace函数的参数必须与元素类型的构造函数相匹配。

    12.包括array在内的每个顺序容器都有一个front成员函数,而除forward_list之外的所有顺序容器都有一个back成员函数。
    调用front,back或者解引用迭代器之前,要确保容器非空,否则这样的操作行为是未定义的。

    13.如果希望确保下标是合法的,可以使用at成员函数。at成员函数类似下标运算符,但如果下标越界,at会抛出一个out_of_range异常

    14.vector,string不支持push_front,不支持pop_front.Forward_list不支持pop_back.

    15.假如erase中输入的两个迭代器相同,返回这个迭代器的值。

    16.内置数组的地址其实就可以看成是迭代器。因此在用内置数组给vector或是list初始化的时候可以用其地址代替迭代器,最后的地址要用end函数,得到尾后迭代器。

    17.resieze改变容器的大小。c.resize(n);或者c.resize(n,t);

    18.如果在一个循环中插入,删除deque,string,vector中的元素,不要缓存end返回的迭代器。

    19.list和forward_list是顺序容器但是不支持随机访问,因此其迭代器允许++但是对于+2这样的操作是不允许的,可以用advance(it,2)来完成。

    20.只有在执行insert操作时size和capacity相等,或者调用resize或reserve时给定的大小超过当前capacity,vector才可能重新分配内存空间。

    21.resize和reserve的区别。前者是改变容器种元素的数量,后者是改变系统预存给这个容器的空间。

  • 相关阅读:
    Chaikin Curves in Processing
    finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
    System.gc()和Runtime.gc()的区别?
    GC原理---对象可达判断
    java十题
    在 Queue 中 poll()和 remove()有什么区别?
    ArrayList和LinkedList的区别
    HashSet的实现原理
    Java中HashMap和TreeMap的区别
    List、Map、Set之间的联系与区别:
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326145.html
Copyright © 2011-2022 走看看