zoukankan      html  css  js  c++  java
  • c++ Primer 第九章不熟悉知识点总结

    1、顺序容器

    vectror   可变大小数组,支持快速随机访问,在尾部之外的位置增删元素速度可能很慢。

    deque    双端队列,支持快速随机访问,在头尾增删元素很快。

    list          双向链表,只支持双向顺序访问,任何位置增删速度都很快。

    forward_list 单向链表,只支持单向顺序访问,任何位置增删速度都很快。

    array     固定大小数组,支持快速随机访问,不能增删元素。

    string    与vector相似的容器,但专门用于保存字符。

    通常,使用vector是最好的选择,除非你有很好的理由选择其他容器。

    (1)容器中的迭代器可以指向上个位置(--(c.begin())),或者指向下个位置(++(c.begin()))

    (2)迭代器c.cbegin()是值返回的是const指针,其他带c的也是一样的,带r表实是反向,比如c.rbegin()指的是末尾的位置。

    (3)当我们把一个容器初始化为另一个容器的时候有两种方式:第一中就是直接拷贝相同类型的容器即可,另一种就是把一个容器的元素拷贝到另一个容器,这部分元素可以是其中的一部分。

    1     std::vector<Accout> temp1;
    2     std::vector<Accout> temp2(temp1);
    3     std::deque<Accout> temp3(temp1.begin(), temp1.begin());

     (4)assgin函数的使用

    1     temp1.assign(temp2.begin(), temp2.end());
    2     temp2.assign(7, "hi");

    把以前的内容清除,且赋值新的内容,要么是一个容器内的元素,或者给与他特定个数的值。

    (5)swap函数的使用

    swap是把两个容器的元素进行对换。

    1     std::vector<int> temp1;
    2     std::vector<int> temp2;
    3     temp1.swap(temp2);
    4     swap(temp1, temp2);

    统一使用非成员版本的swap是一个好习惯。

    (6)访问成员函数返回的是引用

    1     auto ex1 = temp1.back();
    2     ex1 = 5;     //temp1.back()的值并没有改变,还是原来的值
    3     auto &ex2 = temp1.front();
    4     ex2 = 5;     //temp1.front()的值改变了

    所以我们想要改变值的时候注意是否赋值的是引用,当然我们使用下标的时候可以直接赋值,因为下标访问也是引用。

    (7)不要保存end返回的迭代器

    当删除或者新增之后,原来的end返回的迭代器总会失效。所以我们在循环中必须反复调用end,而不能在循环外面保存end返回的迭代器。

    (8)string中的额外的构造函数

    1     string str1 = "Hello World";
    2     string str2(str1, 5);        //表示从str1[5]开始拷贝
    3     string str3(str1, 6, 3);     //表示从str1[6]开始拷贝3个字符
    4 
    5     char arr1[11] = "HelloWorld"; //不是以空字符结束的字符串
    6     const char *arr2 = "HelloWorld"; //以空字符结束的字符串
    7     string str4(arr2, 2);         //表示拷贝arr2的前两个字符

    substr函数

        str1.substr(1, 2);        //表从str1[1]开始拷贝2个字符
        str1.substr(1);           //表从str1[1]开始拷贝

    append和replace函数

        str1.append("str");       //将一个字符串增加str1的末尾,返回一个指向str1的引用
        str1.replace(str2.begin(), str2.end() , "str") //将一个范围内的内容删除,然后替换为str(其中rang可以是一组迭代器,也可以是下标组)

    find函数

    1     str1.find("ss");      //查找ss在str1中第一次出现的位置返回,指定从第二个字符开始,下面同样
    2     str1.rfind("ss");      //查找ss在str1中最后一次出现的位置返回
    3     str1.find_first_of("ss"); //查找“ss”中任何一个字符第一次出现的位置
    4     str1.find_last_of("ss");  //查找“ss”中任何一个字符最后一次出现的位置
    5     str1.find_first_not_of("ss"); //查找第一个不在“ss”中的字符
    6     str1.find_first_not_of("ss"); //查找最后一个不在“ss”中的字符

    compare函数

    1 str1.compare(str2);    //比较函数,可以指两个字符串的位置,返回值为0,正,负
  • 相关阅读:
    博弈论《《转》》
    HDU 2509 Be the Winner
    SORT排序。。
    HDU 356 SNim
    博弈
    KM算法。《转载》以后看。
    jmeter(28)逻辑控制器 之 交替控制器
    jmeter(30)逻辑控制器 之 Switch Controller 暂时不写!
    jmeter(29)逻辑控制器 之 吞吐量控制器
    Shell一个文件并等待完成
  • 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/12760007.html
Copyright © 2011-2022 走看看