C++ STL List和迭代器

124 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

此篇文章的目的是思考并总结出List和迭代器的基本用法;当有一些限制时,需要用到让人头疼的迭代器,参加C++算法比赛的同学应该会有感触。此为第三篇

一、List定义:

List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件#include

二、List定义和初始化:

    listlst1;          //创建空list

    list lst2(5);       //创建含有5个元素的list

    listlst3(3,2);  //创建含有3个元素的list

    listlst4(lst2);    //使用lst2初始化lst4

    listlst5(lst2.begin(),lst2.end());  //同lst4

三、List常用操作函数:

Lst1.assign() 给list赋值

Lst1.back() 返回最后一个元素

Lst1.begin() 返回指向第一个元素的迭代器

Lst1.clear() 删除所有元素

Lst1.empty() 如果list是空的则返回true

Lst1.end() 返回末尾的迭代器

Lst1.erase() 删除一个元素

Lst1.front() 返回第一个元素

Lst1.get_allocator() 返回list的配置器

Lst1.insert() 插入一个元素到list中

Lst1.max_size() 返回list能容纳的最大元素数量

Lst1.merge() 合并两个list

Lst1.pop_back() 删除最后一个元素

Lst1.pop_front() 删除第一个元素

Lst1.push_back() 在list的末尾添加一个元素

Lst1.push_front() 在list的头部添加一个元素

Lst1.rbegin() 返回指向第一个元素的逆向迭代器

Lst1.remove() 从list删除元素

Lst1.remove_if() 按指定条件删除元素

Lst1.rend() 指向list末尾的逆向迭代器

Lst1.resize() 改变list的大小

Lst1.reverse() 把list的元素倒转

Lst1.size() 返回list中的元素个数

Lst1.sort() 给list排序

Lst1.splice() 合并两个list

Lst1.swap() 交换两个list

Lst1.unique() 删除list中重复的元素

迭代器

容器                         迭代器功能

vector                      随机访问

deque                      随机访问

list                            双向

set / multiset           双向

map / multimap      双向

stack                        不支持迭代器

queue                      不支持迭代器

priority_queue         不支持迭代器

迭代器的辅助函数  需要包含头文件 algorithm

STL 中有用于操作迭代器的三个函数模板,它们是:

advance(p, n):使迭代器 p 向前或向后移动 n 个元素。

distance(p, q):计算两个迭代器之间的距离,即迭代器 p 经过多少次 + + 操作后和迭代器 q 相等。如果调用时 p 已经指向 q 的后面,则这个函数会陷入死循环。

iter_swap(p, q):用于交换两个迭代器 p、q 指向的值。

    set <int>::iterator it = s.begin(), m = s.begin();

    for (it++; it != s.end(); it++, m++)        //(支持双向迭代的不能it < s.end();  要用 !=)
    {
        if (*it != *m + 1)

        {
            cout << *m + 1 << " " << f << endl;

            break;
        }

    }