当前位置: 首页 > news >正文

c++ list容器使用详解

list容器概念

list是一个双向链表容器,可高效地进行插入删除元素。

List 特点:

  • list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行++,但是不能这样操作迭代器:it+3
  • 使用时包含 #include <list>  

list对象的构造函数

list同样采用模板类实现,对象的默认构造形式:list<T> listT;  如:

  1. list<int> lstInt;            //定义一个存放int的list容器。
  2. list<float> lstFloat;        //定义一个存放float的list容器。
  3. list<string> lstString;       //定义一个存放string的list容器。

注意:尖括号内还可以设置指针类型或自定义类型

list对象的带参构造函数

方式一:list(beg,end);     //将[beg, end)区间中的元素拷贝给本身。

方式二:list(n,elem);      //构造函数将n个elem拷贝给本身。

方式三:list(const list &lst); //拷贝构造函数。

list<int> lstInt1;lstInt1.push_back(1);lstInt1.push_back(2);lstInt1.push_back(3);list<int> lstInt2(lstInt1.begin(),lstInt1.end());		//1 2 3 list<int> lstInt3(5,8);							//8 8 8 8 8list<int> lstInt4(lstIntA);						    //1 2 3 

list头尾的添加移除操作

list<int> lstInt;lstInt.push_back(1);lstInt.push_back(2);lstInt.push_back(3);lstInt.push_back(4);lstInt.push_back(5);lstInt.pop_front();lstInt.pop_front();lstInt.push_front(11);lstInt.push_front(12);lstInt.pop_back();lstInt.pop_back();
// lstInt    {12, 11, 3}

list数据的读取

  1. list.front();   //返回第一个元素。
  2. list.back();  //返回最后一个元素。
list<int> lstInt;lstInt.push_back(1);lstInt.push_back(2);lstInt.push_back(3);lstInt.push_back(4);lstInt.push_back(5);int iFront = lstInt.front();	//1int iBack = lstInt.back();		//5lstInt.front() = 11;			//11lstInt.back() = 19;			//19

list与迭代器

list<int> lstInt;lstInt.push_back(1);lstInt.push_back(3);lstInt.push_back(5);lstInt.push_back(7);lstInt.push_back(9);for (list<int>::iterator it=lstInt.begin(); it!=lstInt.end(); ++it){cout << *it;cout << " ";}for (list<int>::reverse_iterator rit=lstInt.rbegin(); rit!=lstInt.rend(); ++rit){cout << *rit;cout << " ";}

list的赋值

llist<int> lstIntA,lstIntB,lstIntC,lstIntD;lstIntA.push_back(1);lstIntA.push_back(3);lstIntA.push_back(5);lstIntA.push_back(7);lstIntA.push_back(9);lstIntB.assign(lstIntA.begin(),lstIntA.end());		//1 3 5 7 9lstIntB.assign(++lstIntA.begin(),--lstIntA.end());		//3 5 7lstIntC.assign(5,8);							//8 8 8 8 8lstIntD = lstIntA;							//1 3 5 7 9lstIntC.swap(lstIntD);						//互换

list的大小

list<int> lstIntA;lstIntA.push_back(1);lstIntA.push_back(2);lstIntA.push_back(3);if (!lstIntA.empty()){int iSize = lstIntA.size();		//3lstIntA.resize(5);			//1 2 3 0 0lstIntA.resize(7,1);			//1 2 3 0 0 1 1lstIntA.resize(5);			//1 2 3 0 0}

list的插入

list<int> listA;list<int> listB;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);listB.push_back(11);listB.push_back(12);listB.push_back(13);listB.push_back(14);listA.insert(listA.begin(), -1);		//{-1, 1, 2, 3, 4, 5}listA.insert( ++listA.begin(), 2, -2);	//{-1, -2, -2, 1, 2, 3, 4, 5}listA.insert(listA.begin() , listB.begin() , listB.end());	//{11, 12, 13, 14, -1, -2, -2, 1, 2, 3, 4, 5}for(list<int>::iterator it = listA.begin(); it!=listA.end(); it++){cout<< *it<<endl;}

list的删除

// demo 15-32
#include <list>
#include <vector>
#include <iostream>using namespace std;int main(void){//list 删除元素list<int> listA;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);//erase 的用法list<int>::iterator itBegin=listA.begin();++ itBegin;list<int>::iterator itEnd=listA.begin();++ itEnd;++ itEnd;++ itEnd;listA.erase(itBegin,itEnd);//此时容器lstInt包含按顺序的1, 4, 5三个元素。listA.erase(listA.begin());//此时容器lstInt包含按顺序的4, 5三个元素。listA.push_back(4); // 4, 5, 4listA.insert(listA.end(), 5, 4);  //4, 5, 4, 4, 4, 4, 4, 4/*remove 删除元素*///方式一  直接调用remove 方法//listA.remove(4);//方式二   遍历然后逐个删除for(list<int>::iterator it=listA.begin(); it!=listA.end(); ){if(*it == 4){it =listA.erase(it); //相当于执行了++}else {it++;}}for (list<int>::iterator it=listA.begin(); it!=listA.end(); ++it){cout << *it;cout << " ";}system("pause");return 0;
}

list的反向排列

  1. list.reverse();     //反转链表,比如list包含1, 2, 3, 4, 5五个元素,运行此方

        法后,list就包含5, 4, 3, 2, 1元素。

list<int> listA;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);listA.reverse();			//5, 4, 3, 2, 1

http://www.lryc.cn/news/235696.html

相关文章:

  • 【案例】可视化大屏
  • js制作动态表单
  • 解决Kibana初始化失败报错: Unable to connect to Elasticsearch
  • 流媒体服务器
  • Java GUI小程序之图片浏览器
  • Kafka-4.1-工作原理综述
  • Linux八股文
  • SPASS-偏相关分析
  • 第二证券:今日投资前瞻:小米汽车引关注 全球风光有望持续高速发展
  • Docker中的RabbitMQ已经启动运行,但是管理界面打不开
  • 自动化网络图软件
  • 如何基于亚马逊云科技打造高性能的 SQL 向量数据库 MyScale
  • 《轻松入门!快速安装PyCharm,打造高效Python编程环境》
  • Golang环境搭建Win10(简洁版)
  • 【算法每日一练]-分块(保姆级教程 篇1)POJ3648
  • 【华为OD题库-026】通过软盘拷贝文件-java
  • 定量数据和定性数据
  • 【Linux】:体系结构与进程概念
  • react-router-dom 版本6.18.0中NavLink的api和属性介绍
  • 八叉树(Octree)和KD树区别?2d tree与3d tree区别?
  • Union(联合体、共用体)
  • C++11的互斥包装器
  • HR应用在线人才测评,给企业招聘带来的好处
  • 深入了解百度爬虫工作原理
  • 【C语言基础】分享近期学习到的volatile关键字、__NOP__()函数以及# #if 1 #endif
  • docker容器自启动
  • 【C++】:模板的使用
  • Springboot框架中使用 Redis + Lua 脚本进行限流功能
  • 【nlp】2.5(cpu version) 人名分类器实战项目(对比RNN、LSTM、GRU模型)
  • 记录基于scapy构造ClientHello报文的尝试