STL标准库(三)序列容器之list

本文详细介绍了C++中的std::list容器及其迭代器的使用,包括迭代器的定义、模板函数print的应用,以及如何进行双向链表的元素插入、删除、随机访问操作和反向遍历。
摘要由CSDN通过智能技术生成

如下一个程序进行演示讲解

#include <list> 需要包含该迭代器

template <typename T>

void print(T Begin, T end)

{

    for (T i = Begin; i != end; ++i)

    {

       std::cout << *i << std::endl;

    }

    std::cout << std::endl;

}

int main()

{

    std::list<int> obj(5,123);  定义一个int类型5个元素初始化为123的双向链表,obj是迭代器,该迭代器是struct std::bidirectional_iterator_tag 双向迭代器 支持++ -- != == = * ,不支持[] + - += -=

    std::list<int>::iterator it = obj.begin(); 定义一个迭代器有两种方式,此时是第一种方式定义

    std::cout << *it << std::endl; 打印值为123

    print(obj.begin(), obj.end()); 模板函数也可以应用

    for (size_t i = 0; i < 5; i++) 遍历初始化该双向链表容器

    {

       *it = i;

       it++;

    }

    auto endit = obj.end(); 此时为另一种方式定义迭代器

    endit--; 指向尾部前一个

    std::cout << *endit << std::endl; 打印4

    print(obj.begin(), obj.end());从头到尾打印

    obj.push_back(666); 尾部插入666

    obj.push_front(111); 头部插入111

    auto bit = obj.begin(); 再次定义一个迭代器

由于只有随机访问迭代器支持直接任何位置插入或删除,所以下面讲述list容器任意位置的插入和删除

    for (size_t i = 0; i < 5; i++) 利用for循环进行任意位置的插入

    {

       bit++;

       if (i == 3)

       {

           obj.insert(bit, 5,555); 在bit这个位置插入5,555,可以一次插入多个元素

           break;

       }

    }

只有随机访问迭代器支持直接任何位置插入或删除

    obj.front() = 12138;

    obj.back() = 128;

    print(obj.rbegin(), obj.rend()); 基于反向迭代器的遍历,从后到前打印

    obj.pop_back(); 尾部元素弹出

    obj.pop_front(); 头部元素弹出

    for (size_t i = 0; i < 5; i++) 从任意位置弹出元素

    {

       bit++;

       if (i == 3)

       {

           obj.erase(bit);

           break;

       }

    }

    obj.erase(obj.begin(),obj.end()); 指定范围内所有元素弹出

    obj.clear(); 清空该容器所有元素

    system("pause");

    return 0;

}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值