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,正,负

猜你喜欢

转载自www.cnblogs.com/xiaodangxiansheng/p/12760007.html