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

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

#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;

}

相关推荐
Gofarlic_oms15 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上6 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble6 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin6 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy6 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
郑州光合科技余经理7 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
南子北游8 小时前
Python学习(基础语法1)
开发语言·python·学习
张健11564096488 小时前
使用信号量限制并发数量
开发语言·c++
jc06208 小时前
6.1云原生之Docker
c++·docker·云原生