• list的特点

    在list开头、中间、末尾插入数据,所需时间都是固定的,将元素从list中产出所需的时间是固定的。插入或者删除元素后,指向list中其他元素的迭代器仍然有效。
    不过搜索速度比vector慢,因为元素没有储存在连续的内存单元中。

  • 插入元素

    使用成员函数push_back()和push_front在list末尾和开头插入元素,使用成员函数insert在list中插入元素。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    list<int> intList(3, 6);
    intList.push_front(5);
    intList.push_back(7);

    //在迭代器指向的位置添加一个元素
    intList.insert(intList.begin(), 4);

    //在迭代器指向的位置添加指定数量的某个元素
    intList.insert(intList.end(), 2, 8);

    //在迭代器指向的位置插入某个容器两个迭代器之间的元素
    list<int> anoList(2, 9);
    intList.insert(intList.end(), anoList.begin(), anoList.end());
  • 删除元素

    使用list::erase()来删除list中的元素,他有两个重载版本,一个版本接受一个迭代器并删除迭代器指向的元素,另一个接受两个迭代器参数并删除指定范围内的所有元素。

  • 元素反转和排序

    使用list的成员方法reverse()和sort()对list进行反转和排序,执行者两个操作后之前指向元素的迭代器仍然有效。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    	list<int> intList;
    intList.push_back(7);
    intList.push_front(5);
    intList.push_back(6);

    auto int6 = --intList.end(); //6
    list<int>::const_iterator int7 = ++intList.begin(); //7
    //反转
    intList.reverse();
    //排序
    intList.sort();
    cout << *int6 << endl; //6
    cout << *int7 << endl; //7
    ```

    >其中排序方法sort()还有一个重载版本,接受一个二元谓词作为参数:

    ```c++
    //从大到小排序
    bool MySortStandard(const int& lsh, const int& rsh) {
    return (lsh > rsh);
    }
    int main()
    {
    ......
    //排序
    intList.sort(MySortStandard);
    ......
    }

STL forward_list

从c++11起,可以使用单向链表forward_list;
使用时需要包含头文件 <forward_list>
使用forward时,只能使用push_front()函数在开头插入元素,其他操作与list很像。


 评论