文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用C++中的list

2023-06-25 16:27

关注

本篇内容主要讲解“怎么使用C++中的list”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C++中的list”吧!

构造的使用

构造函数的使用主要有4个,分别如下

list()构造空的list
list (size_type n, const value_type& val = value_type())构造的list中包含n个值为val的元素
list (const list& x)拷贝构造函数
list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list

1 构造空list

不需要传入任何参数,直接利用list类模板定义对象

list<int> l1;        //定义int型链表 list<char> l2;       //定义char型链表 list<double> l3;     //定义double型链表 //上面的三个对象,内容都空

2 构造含n个值为val的元素

按照上面的定义直接传参即可

list<int> l1(4,5);           //定义int型链表,含有4个5 list<char> l2(3,'s');        //定义char型链表,含有3个's' list<double> l3(4,2.3);     //定义double型链表,含有4个2.3

3 拷贝构造

即传入一个同类型的list

list<int> l1(4,5);           //定义int型链表,含有4个5 list<int> l2(l1);            //把l1的内容复制一份给了l2

4 用迭代区间

**这里有个注意点,迭代区间是左闭右开的!**即不包含右边界.

int num[4] = {1,2,3,4};list<char> l1(3,'w');list<char> l2(l1.begin(),l1.end());  //end()是最后一个元素位置的下一个元素位置,所以不包括,因此l2的内容是 'w' 'w' 'w'list<int> l3(num,num + 3);       //因为num+3的位置,索引为3,但是迭代区间左闭右开,所以不包括索引3位置,内容为1 2 3

迭代器接口

C++提供了如下:

函数声明接口说明
begin() + end()返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器
rbegin() + rend()返回第一个元素的reverse_iterator,即end位置 + 返回最后一个元素下一个位置的reverse_iterator,即begin位置

1 正常迭代接口

int num[5] = {1,2,3,4,5};list<int> li(num,num+5);    //创建内容为1 2 3 4 5的链表list<int>::iterator it = li.begin();while(it = li.end()){    cout<<*it<<" ";    it++;}//输出结果为: 1 2 3 4 5

2 逆向迭代接口

int num[5] = {1,2,3,4,5};list<int> li(num,num+5);    //创建内容为1 2 3 4 5的链表list<int>::iterator it = li.rbegin();while(it = li.rend()){    cout<<*it<<" ";    it++;}//输出结果为: 5 4 3 2 1

容量接口

主要有两个,如下:

函数声明接口说明
empty()检测list是否为空,是返回true,否则返回false
size()返回list中有效节点的个数
int num[5] = {1,2,3,4,5};list<int> li(num,num+5);    //创建内容为1 2 3 4 5的链表list<int> li1;if(li.empty())   {    cout<<"list没有数据"<<endl;}else {    cout<<"list有"<<li.size()<<"个元素"<<endl;}if(li1.empty())   {    cout<<"list1没有数据"<<endl;}else {    cout<<"list1有"<<li1.size()<<"个元素"<<endl;}

元素访问

这里c++提供了两个接口,分别用于首尾访问front() 和 back();

int num[5] = {1,2,3,4,5};list<int> li(num,num+5);    //创建内容为1 2 3 4 5的链表cout << "front获取的元素为:"<<li.front()<<endl;cout << "back获取的元素为:"<<li.back()<<endl;

数据修改

这里主要提供了如下接口:

函数声明接口说明
push_front()在list首元素前插入值为val的元素
pop_front()删除list中第一个元素
push_back()在list尾部插入值为val的元素
pop_back()删除list中最后一个元素
insert(iterator pos,const value_type& val)在list position 位置中插入值为val的元素
erase(iterator pos)删除list position位置的元素
swap()交换两个list中的元素

头插

list<int> li(2,3);li.push_front(9);//现在list的内容为:9 2 3

头删

list<char> li(3,'s');li.pop_front();//现在list的内容为:s s

尾插

list<char> li(3,'s');li.push_back('a');//现在list的内容为:s s s a

尾删

list<int> li(4,2);li.pop_back();//现在的list内容为: 2 2 2

pos位置插入

这里博主先介绍一个全局函数find(),它是一个函数模板

template <class InputIterator, class T>InputIterator find (InputIterator first, InputIterator last, const T& val);

即我们需要传三个参数,前两个是迭代器区间,后是待查找值,其中迭代器区间是左闭右开.

list<int> li;li.push_bakc(1);li.push_bakc(2);li.push_bakc(3);list<int>::iterator it = li.begin();it = find(it,it+3,2)       //找到元素2的位置li.insert(it,66);//现在的list内容为: 1 66 2 3

erase擦除pos位置

list<int> li;li.push_bakc(1);li.push_bakc(2);li.push_bakc(3);list<int>::iterator it = li.begin();it = find(it,it+3,2)           //找到元素2的位置li.erase(it);//现在的list内容为: 1 3

交换两个链表元素

int num1[4] = {1,2,3,4};int num2[5] = {5,4,3,2,1};list<int> li1(num1,num1 + 4);list<int> li2(num2,num2 + 5);li1.swap(li2); //交换链表//现在li1为: 5 4 3 2 1//现在li2为: 1 2 3 4

到此,相信大家对“怎么使用C++中的list”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯