前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链表list

链表list

作者头像
用户7272142
发布2023-11-02 09:23:58
1040
发布2023-11-02 09:23:58
举报
文章被收录于专栏:Republic博客Republic博客

链表我们在C++语言数据结构中已经有笔记说明了,list和vector的区别其实就相对于数组和链表的区别

vector是内存连续的结构,list是内存不连续的结构 二者的对比我之前已经在笔记中专门有一篇说这个的 传送门https://cloud.tencent.com/developer/article/2338529

总之,根据他们特性的差异可以格局自己的具体场合来选择合适STL模型 以提高程序的性能为主

list的头文件和命名空间

#include<\list>

using namespace std;在std标准命名空间中

List的定义

list是动态链表 跟vector一样 他也能够应对各种类型,它是一个类模板 例如

list<int> list_int;//定义了一个内部元素是int的链表

list<char> list_int;//定义了一个内部元素是char的链表

list<Books> list_int;//定义了一个内部元素是Books的链表

list<char*> list_int;//定义了一个内部元素是char*的链表

而且容量大小没有限制

list的初始化

初始化的方法也是有多种,

代码语言:javascript
复制
#include <list>
int main (int argc, char* argv[])
{
  std::list<int> one;                                //定义一个空的、元素类型是 int 的 list 链表
  std::list<int> two(4,100);               //定义一个包含4个元素,每个元素的值都是100的 list 链表
  std::list<int> three(two.begin(),two.end());  //使用 two 这个对象的迭代器,从开始到结束的所有元素来初始化当前对象
  std::list<int> four(three);                       // 使用 three 这个对象来初始化当前对象
  
  int myints[] = {16,2,77,29};
  std::list<int> five (myints, myints + sizeof(myints) / sizeof(int) ); //使用一个普通的 int 数组来初始化当前对象

  return 0;
}

同时我们也可以通过

代码语言:javascript
复制
#include<list>
#include<vector>
using namespace std;

int main()
{
 vector<int>arr_int(20,2);
 list<int>arr_list(arr_int.begin(),arr_int.end());
}

将vector对象的数据初始化为list的数据

list的常用基本操作

list<\int> list_int;

① list_int.size();        //返回 list_int 链表元素的总个数

② list_int.front();        //返回 list_int 链表的第一个元素的值

③ list_int.back();        //返回 list_int 链表的最后一个元素的值

④ list_int.clear();        //清空 list_int 链表,即把里面的所有元素都删除

⑤ list_int.begin();        //返回 list_int 链表第一个数的迭代器

⑥ list_int.end();        //返回 list_int 链表最后一个数的迭代器

⑦ list_int.empty();        //判断 list_int 链表是否为空,如果为空则返回true,非空(有元素)则返回false

⑧ list_int.swap(v1);    //v1是另一个动态链表,将 list_int 和 v1 两个链表的元素互换

⑨ list_int.reverse();     //把 list 中的元素顺序倒转

⑩ list_int.sort();                    // 给list排序

a list_int.splice(list_int.begin(), list_2); //将两个list合并

list的动态插入

list 支持的动态插入也有多种方式:

①、调用 push_back 在尾部插入一个元素,只能是一个一个插入:list_int.push_back(3);

②、调用 push_front 在头部插入一个元素,只能是一个一个插入:list_int.push_front(2);

③、调用 insert 在第一个元素的前面插入一个元素,list_int.insert(list_int.begin(), 888);

④、调用 insert 在第一个元素的前面插入3个888元素,list_int.insert(list_int.begin(), 3, 888);

list 的动态删除

①、list_int.pop_back();    //删除 list_int动态链表的最后一个元素

②、list_int.erase(list_int.begin()); //删除第一个元素

③、list_int.erase(itor, list_int.end()); //删除中间的元素

list 的遍历

因为是 list 不是数组,所以不能用下标来遍历,只能用迭代器来遍历,如下:

for (list<\int>::iterator itor =list_int.begin(); itor !=list_int.end(); ++itor)

{

    int value = *itor;

    cout << "value = " << value << endl;

}

homework

定义一个 int 类型的 list 动态链表,将以下元素:1, 4, 3, 7, 9, 3, 6, 8, 3, 5, 2, 3, 7 插入到动态链表中。之后,使用 for 循环删除动态链表中的值为 3 的元素,并将结果输出出来!

代码语言:javascript
复制
#include<list>
#include<vector>
#include<iostream>
using namespace std;

int main()
{
 int arr_list[] = { 1, 4, 3, 7, 9, 3, 6, 8, 3, 5, 2, 3, 7 };
 list<int> list_(arr_list, arr_list + sizeof(arr_list) / sizeof(int));
 for (list<int>::iterator pr = list_.begin(); pr!= list_.end(); pr++)
 {
     if (*pr == 3)
     {
         pr = list_.erase(pr);
     }
     cout << " list_ = :" << *pr;
 }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • list的头文件和命名空间
  • List的定义
  • list的初始化
    • list的常用基本操作
      • list的动态插入
        • list 的动态删除
          • list 的遍历
          • homework
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档