list容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: list容器

导航:


1.list容器的基本概念(功能,组成,优缺点)

2.list 容器的构造函数

3.list 容器的赋值操作

4.list 容器的大小容量

5.list 容器的插入与删除

6.list 容器数据存取

7.list 容器反转和排序

———————————————————————————————————


1.list容器的基本概念


功能:将数据进行链式存储。

链表:是一种物理存储单元非连续的存储结构,数据元素中的逻辑顺序通过指针链表实现。


链表组成:一系列的结点

结点组成:一个是存储数据元素的数据域,另一个是存储下一个结点的地址


STL中链表是一个双向循环列表


优点:对任意位置可以快速添加,删除元素(动态分配,不会造成浪费)。

缺点:遍历没有数组遍历的快,并且占用空间比较大。


链表中存储方式不是连续内存空间,list中迭代器只支持前移后移,属于双向迭代器

插入删除元素不影响迭代器失效,vector不成立(动态分配内存对导致内存改变从而失效)


———————————————————————————————————


2.list 容器的构造函数


list< T >v; //默认构造函数

list(v.begin(),v.end()); //将[ begin(),end())中的拷贝到本身

list(n,elem); //构造函数将n个elem数据拷贝本身

list(const vector &vec); //拷贝构造函数


例子:


#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>& L)  //遍历list容器
{
  for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
  {
  cout<<(*it)<<" ";
  }
  cout<<endl;
}
void test()
{
  //创建list容器
  list<int> L;  //默认构造
  L.push_back(10);
  L.push_back(20);
  L.push_back(30);
  L.push_back(40);
  PrintList(L);
  //区间构造
  list<int> L1(L.begin(),L.end());
  PrintList(L1);
  //n个elem
  list<int> L2(5,100);
  PrintList(L2);
  //拷贝构造
  list<int> L3(L2);
  PrintList(L3);
}
int main()
{
  test();
  system("pause");
  return 0;
}



———————————————————————————————————


3.list 容器的赋值操作


普通赋值 .push_back()

operator= 赋值

assign 区间赋值

assign n个elem赋值

swap() //互换容器


例子:


#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>& L)  //遍历list容器
{
  for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
  {
  cout<<(*it)<<" ";
  }
  cout<<endl;
}
void test()
{
  list<int> L1;
  L1.push_back(10); //尾插
  L1.push_back(20);
  L1.push_back(30);
  L1.push_back(40);
  PrintList(L1);
  list<int> L2;
  L2 = L1;   //operator= 赋值
  PrintList(L2);
  list<int> L3;
  L3.assign(L2.begin(),L2.end());  //assign 区间
  PrintList(L3);
  list<int> L4;
  L4.assign(5,100);  //assign n个elem赋值
  PrintList(L4);
}
int main()
{
  test();
  system("pause");
  return 0;
}



———————————————————————————————————


4.list 容器的大小容量


.empty() //判断容器是否为空

.size() //返回容器中的元素个数

.resize(int num) //重新指定容器长度为num,容器变长,则以默认值0填充到新位置;变短超出元素被删

.resize(int num.int elem) //同上,不过多出来的位置填充elem


———————————————————————————————————


5.list 容器的插入与删除


pop,push,insert,erase(用迭代器),remove(elem)(移除所有elem值),clear()


———————————————————————————————————


6.list 容器数据存取


不支持迭代器随机访问

支持递增,递减


front(),back()


例子:


#include <iostream>
using namespace std;
#include <list>
void test()
{
  list<int> L1;
  L1.push_back(10); //尾插
  L1.push_back(20); 
  L1.push_back(30); 
  L1.push_back(40); 
  cout<<L1.front()<<endl;
  cout<<L1.back()<<endl;
  list<int>::iterator it = L1.begin();
  it++;   //支持递增 
  cout<<(*it)<<endl;
  it--;   //支持递减
}
int main()
{
  test();
  system("pause");
  return 0;
}



运行结果:



———————————————————————————————————


7.list 容器反转和排序


反转 reverse()

排序 sort() //升序 sort(compare) //降序,添加一个返回值为bool的函数


例子:


#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>&L)
{
  for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
  {
  cout<<(*it)<<" ";
  }
  cout<<endl;
}
bool compare(int val1,int val2)   //写一个返回值为bool类型的函数
{
  return val1>val2;
}
//list反转和排序
void test()
{
  list<int> L1;
  L1.push_back(10); //尾插
  L1.push_back(20); 
  L1.push_back(30); 
  L1.push_back(40); 
  //反转前
  cout<<"反转前:"<<endl;
  PrintList(L1);
  L1.reverse();  //反转
  cout<<"反转后:"<<endl;
  PrintList(L1);
  //排序后
  //所有不支持随机访问迭代器的容器,不可以用标准算法
  //不支持随机访问迭代器的容器,内部会提供对应一些算法
  L1.sort();  //可以直接调用
  cout<<"排序后:"<<endl;
  PrintList(L1);
  //进行降序排序
  cout<<"进行降序排序:"<<endl;
  L1.sort(compare);   //将函数名放进去
  PrintList(L1);
}
int main()
{
  test();
  system("pause");
  return 0;
}
相关文章
|
11月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
185 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
11月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
187 5
|
11月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
188 2
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
256 5
|
编译器 C++ 容器
【C++/STL】:list容器的深度剖析及模拟实现
【C++/STL】:list容器的深度剖析及模拟实现
89 2
|
存储 C++ 容器
【C++/STL】:list容器的基本使用
【C++/STL】:list容器的基本使用
109 1
|
存储 C++ 容器
黑马c++ STL部分 笔记(7) list容器
黑马c++ STL部分 笔记(7) list容器
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
算法 C语言 C++
【C++】详解STL的容器之一:list
【C++】详解STL的容器之一:list