C++中STL学习笔记——容器之list
时间:2022-07-23
本文章向大家介绍C++中STL学习笔记——容器之list,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
容器——list
概述
C++中的容器大致分为两类:顺序容器和关联容器。以后会逐一讲解。本文主要讲解顺序容器中的list。
想要使用list,需要包含头文件list,即#include<list>。List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。
1.定义和初始化
list<int> lst1;//创建空list
定义一个空的链表lst1
list<int> lst2(3);//创建含有三个元素的list
定义一个长度为3的链表,默认初始化为0
list<int> lst3(3,2);//创建含有三个元素的list
定义一个长度为3,元素值为2的链表
list<int> lst4(lst2);//使用lst2初始化lst4,初始化后lst2=lst4
list<int> lst5(lst2.begin(),lst2.end());//同上
将某一个链表复制给另一个
2.常见操作
lst1.assign(lst2.begin(),lst2.end());//分配值
将lst2的值分配给lst1
lst1.push_back(10);//添加值
在lst1的末尾添加一个元素10
lst1.pop_back();//删除末尾值
删除lst1的末尾
lst1.begin();//返回首值的迭代器
lst1.end();//返回尾值的迭代器
lst1.front();//返回第一个元素的引用
lst1.back();//返回最后一个元素的引用
在vector中已经讲过begin和end了,这里就只讲front和back,他俩是引用,因此可以直接访问,即可以写作。
cout<<lst1.front()<<endl;//返回第一个元素的引用
cout<<lst1.back()<<endl;//返回最后一个元素的引用
bool isEmpty1 = lst1.empty();//判断为空
判断是否为空
lst1.erase(++lst1.begin(),--lst1.end());//删除元素,由于迭代器是地址指针,因此不能直接+1,需要写成++或者--
删除之间元素
lst1.insert(lst1.begin(),3,10);//从指定位置插入3个10
从指定位置插入指定数量的元素
cout<<*lst1.rbegin()<<endl;//返回第一个元素的前向指针
cout<<*lst1.rend()<<endl;//返回最后一个元素的前向指针
返回第一个元素的前向、后向指针, 返回一个逆序迭代器,它指向容器list的最后一个、第一个元素。
lst1.remove(10);//与remove形参相同的元素全部删除
删除与remove函数形参相同的结点
lst1.reverse();//反转
整个链表反转
lst1.unique();//删除相邻重复元素
删除整个链表中的重复结点,使得链表每个结点都不同
3.元素获取(遍历方法)
for(list<int>::const_iterator iter = lst1.begin();iter != lst1.end();iter++){
cout<<*iter<<endl;
}
对于list而言,只能采用迭代器的方式访问(思考一下他的实现原理,很容易理解为何只能这样访问)。
4.以上代码的可执行代码
#include <iostream>
#include <list>
using namespace std;
//List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。
int main(){
//1.定义和初始化
list<int> lst1;//创建空list
list<int> lst2(3);//创建含有三个元素的list
list<int>::iterator iter0=lst2.begin();
for(int i=1;iter0!=lst2.end();iter0++){
*iter0=i++;
}
list<int> lst3(3,2);//创建含有三个元素的list
list<int> lst4(lst2);//使用lst2初始化lst4,初始化后lst2=lst4
list<int> lst5(lst2.begin(),lst2.end());//同上
//2.常见操作
lst1.assign(lst2.begin(),lst2.end());//分配值
list<int>::iterator iter=lst1.begin();
for(;iter!=lst1.end();iter++){
cout<<*iter<<endl;
}
cout<<"lst1.size="<<lst1.size()<<endl;
lst1.push_back(10);//添加值
cout<<"lst1.size="<<lst1.size()<<endl;
lst1.pop_back();//删除末尾值
cout<<"lst1.size="<<lst1.size()<<endl;
lst1.begin();//返回首值的迭代器
lst1.end();//返回尾值的迭代器
bool isEmpty1 = lst1.empty();//判断为空
cout<<"lst1是否为空:"<<isEmpty1<<endl;
lst1.erase(++lst1.begin(),--lst1.end());//删除元素,由于迭代器是地址指针,因此不能直接+1,需要写成++或者--
cout<<"lst1.size="<<lst1.size()<<endl;
cout<<lst1.front()<<endl;//返回第一个元素的引用
cout<<lst1.back()<<endl;//返回最后一个元素的引用
lst1.insert(lst1.begin(),3,10);//从指定位置插入3个10
cout<<"lst1.size="<<lst1.size()<<endl;
cout<<*lst1.rbegin()<<endl;//返回第一个元素的前向指针, 返回一个逆序迭代器,它指向容器c的最后一个元素
lst1.remove(10);//与remove形参相同的元素全部删除
cout<<"lst1.size="<<lst1.size()<<endl;
cout<<"反转前lst1[0]="<<*lst1.begin()<<endl;
lst1.reverse();//反转
cout<<"反转后lst1[0]="<<*lst1.begin()<<endl;
lst1.sort();//排序
cout<<"排序后lst1[0]="<<*lst1.begin()<<endl;
lst1.insert(lst1.begin(),100,2);//从指定位置插入100个2
cout<<"去重前lst1.size="<<lst1.size()<<endl;
lst1.unique();//删除相邻重复元素
cout<<"去重后lst1.size="<<lst1.size()<<endl;
//遍历
for(list<int>::const_iterator iter = lst1.begin();iter != lst1.end();iter++)
{
cout<<*iter<<endl;
}
//getchar();
return 0;
}
- Java基础-day05-超市收银系统案例题
- mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询
- 【深度学习系列】关于PaddlePaddle的一些避“坑”技巧
- 【深度学习系列】PaddlePaddle可视化之VisualDL
- Java基础-day04-代码题
- 【深度学习系列】CNN模型的可视化
- mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例
- 真实场景的虚拟视点合成(View Synthsis)详解
- mongodb11天之屠龙宝刀(七)functions: mongodb 执行 functions入门案例
- 真实场景的双目立体匹配(Stereo Matching)获取深度图详解
- mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比
- Java基础-day04-基础题
- OpenCV亚像素角点cornerSubPixel()源代码分析
- mongodb11天之屠龙宝刀(十) 备份 还原 导出 导入::CSV,JSON,BOSN,解决中文乱码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法