• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++语言 STL容器list总结

C++语言 STL容器list总结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++语言,c语言和c++有什么区别,c++程序设计语言,c语言与c++的区别,c++语言入门等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在使用std::list<>链表时,难免会对数据进行添加删除操作。而遍历链表则有两种方式:通过索引访问,象数组一样处理;通过std::list<>::iterator链表遍历器进行访问

STL 中的list 就是一 双向链表,可高效地进行插入删除元素。

list不支持随机访问。所以没有 at(pos)和operator[]。

list 对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) 。list< int>::iterator it;

构造,析构

list<Elem> c //创建一个空的list 

list<Elem> c1(c2) //复制另一个同类型元素的list 

list<Elem>c(n) //创建n个元素的list,每个元素值由默认构造函数确定 

list<Elem>c(n,elem) //创建n个元素的list,每个元素的值为elem 

list<Elem>c(begin,end) //由迭代器创建list,迭代区间为[begin,end) 

c.~list();       // 销毁所有元素,释放内存 

</div>

### 其他###

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

c.swap(c2) //将c2和c的元素互换 

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

c.max_size() //返回容器中最大数据的数量 

c.resize(num) //重新指定链表的长度 

c.reverse() //反转链表 

c.sort() //对列表进行排序,默认升序,可以自定义回调函数 
//示例 
list 对象L1(4,3,5,1,4) 
L1.sort( );         // L1(1,3,4,4,5) 
L1.sort( greater <int >() ); // L1(5,4,4,3,1) 

c.merge() //合并两个有序列表使之有序 
//示例 
// 升序 
list1.merge(list2); // list1(1,2,3,4,5,6) list2 现为空 
// 降序 
L1( 3,2,1), L2(6,5,4) 
L1.merge(L2, greater <int >() );
// list1(6,5,4,3,2,1) list2 现为空 

c.splice() 
//对两个链表进行结合( 三个重载函数) 结合后第二个链表清空 


//示例 
list1.splice( ++list1.begin(),list2); 
// list1(1,4,5,6,2,3) list2 为空 
 list1.splice( ++list1.begin(),list2,list2.begin()); 
// list1( 1,4,2,3); list2(5,6) 
list1.splice( ++list1.begin(),list2,++list2.begin(),list2.end()); 
//list1( 1, 5,6, 2,3); list2(4) 

</div>

### 赋值###

c.assign(begin,end) //将[begin,end)区间中的数据赋值给c 

c.assign(n,Elem) //将n个Elem的拷贝赋值给c 

c.swap(c2) //将c2和c的元素互换 

</div>

### 数据访问###

c.front() //返回第一个数据 

c.back() //返回最后一个数据 

c.begin() //返回指向第一个元素的迭代器(指针) 

c.end() //返回指向最后一个数据的下一个位置的迭代器(指针) 

c.rbegin() 
//返回逆向队列的第一个数据,也就是返回容器中倒数第一个元素的迭代器 

c.rend() 
//返回指向逆向队列的最后一个数据的下一个位置的迭代器, 
//也就是返回容器中倒数最后一个元素之后的迭代器 

</div>

### 插入数据###

c.push_back(Elem) //list元素尾部增加一个元素x 

c.push_front(Elem) //list元素首元素钱添加一个元素X 

c.insert(pos,Elem) //在pos位置插入一个Elem拷贝,返回新数据的位置 

c.insert(pos,n,Elem) //在pos位置插入n个Elem数据,无返回值 

c.insert(pos,begin,end)
//在pos位置插入在[begin,end)区间的数据,无返回值 

</div>

### 删除数据###

c.pop_back() //删除容器尾元素,当且仅当容器不为空  

c.pop_front() //删除容器首元素,当且仅当容器不为空  

c.remove(Elem) //删除容器中所有元素值等于x的元素  

/** 
 remove_if()删除条件满足的元素(会遍历一次链表) 
*/  
void remove_if_test(){  
ShowList(g_list1);  
g_list1.remove_if(myFun);  
ShowList(g_list1);  
}  

c.clear() //删除容器中的所有元素  

c.erase(pos) //删除pos位置的数据,返回下一个数据的位置  

c.erase(begin,end) 
//删除[begin,end)区间的数据,返回下一个数据的位置  

c.unique() //删除相邻重复元素  
//示例  
L1( 1, 1 ,4,3,5,1)  
L1.unique( );     // L1(1,4,3,5,1)  

</div>

### 示例###

#include<iostream> 
#include<stdio.h> 
#include<list> 
using namespace std; 
list < int > g_list1; 
list < int > g_list2; 
/** 
 初始化全局列表 
*/ 
void InitList(){ 
// push_back()增加一元素到链表尾 
g_list1.push_back( 1 ); 
g_list1.push_back( 2 ); 
g_list1.push_back( 3 ); 
// push_front()增加一元素到链表头 
g_list2.push_front( 6 ); 
g_list2.push_front( 5 ); 
g_list2.push_front( 4 ); 
} 
/** 
 输出一个链表 
*/ 
void ShowList(list < int >& listTemp){ 
// size()返回链表中元素个数 
cout << listTemp.size() << endl; 

for (list < int > ::iterator it = listTemp.begin();
it != listTemp.end(); ++ it){ 
  cout << * it << ' ' ; 
} 
  cout << endl; 
} 
/** 
 构造函数,空链表 
*/ 
void constructor_test0(){ 
list < int > listTemp; 
cout << listTemp.size() << endl; 
} 
/** 
 构造函数,建一个含三个默认值是0的元素的链表 
*/ 
void constructor_test1(){ 
 list < int > listTemp( 3 ); 
 ShowList(listTemp); 
} 
/** 
 构造函数,建一个含五个元素的链表,值都是1 
*/ 
void constructor_test2(){ 
 list < int > listTemp( 5 , 1 ); 
 ShowList(listTemp); 
} 
/** 
 构造函数,建一个g_list1的copy链表 
*/ 
void constructor_test3(){ 
 list < int > listTemp(g_list1); 
 ShowList(listTemp); 
} 
/** 
 构造函数,listTemp含g_list1一个区域的元素[_First, _Last) 
*/ 
void constructor_test4(){ 
 list < int > listTemp(g_list1.begin(), g_list1.end()); 
 ShowList(listTemp); 
} 
/** 
 assign()分配值,有两个重载 
 template <class InputIterator> 
 void assign ( InputIterator first, InputIterator last ); 
 void assign ( size_type n, const T& u ); 
*/ 
void assign_test(){ 
 list < int > listTemp( 5 , 1 ); 
 ShowList(listTemp); 
 listTemp.assign( 4 , 3 ); 
 ShowList(listTemp); 

 listTemp.assign( ++ g_list1.begin(), g_list1.end()); 
 ShowList(listTemp); 
} 
/** 
 operator= 
*/ 
void operator_equality_test(){ 
 g_list1 = g_list2; 
 ShowList(g_list1); 
 ShowList(g_list2); 
} 
/** 
 front()返回第一个元素的引用 
*/ 
void front_test7(){ 
 cout << g_list1.front() << endl; 
} 
/** 
 back()返回最后一元素的引用 
*/ 
void back_test(){ 
 cout << g_list1.back() << endl; 
} 
/** 
 begin()返回第一个元素的指针(iterator) 
*/ 
void begin_test(){ 
 list < int > ::iterator it1 = g_list1.begin(); 
 cout << *++ it1 << endl; 

 list < int > ::const_iterator it2 = g_list1.begin(); 
 it2 ++ ; 
 // (*it2)++; // *it2 为const 不用修改 
 cout << * it2 << endl; 

} 
/** 
 end()返回 [最后一个元素的下一位置的指针] 
 (list为空时end()= begin()) 
*/ 
void end_test(){ 
list < int > ::iterator it = g_list1.end(); // 注意是:最后一个元素的下一位置的指针 
-- it; 
cout << * it << endl; 
} 
/** 
 rbegin()返回链表最后一元素的后向指针 
*/ 
void rbegin_test(){ 
 list < int > ::reverse_iterator it = g_list1.rbegin(); 
 for (; it != g_list1.rend(); ++ it){ 
 cout << * it << ' ' ; 
} 
 cout << endl; 
} 
/** 
 rend()返回链表第一元素的下一位置的后向指针 
*/ 
void rend_test(){ 
list < int > ::reverse_iterator it = g_list1.rend(); 
-- it; 
cout << * it << endl; 
} 
/** 
 push_back()增加一元素到链表尾 
*/ 
void push_back_test(){ 
ShowList(g_list1); 
g_list1.push_back( 4 ); 
ShowList(g_list1); 
} 
/** 
 push_front()增加一元素到链表头 
*/ 
void push_front_test(){ 
ShowList(g_list1); 
g_list1.push_front( 4 ); 
ShowList(g_list1); 
} 
/** 
 pop_back()删除链表尾的一个元素 
*/ 
void pop_back_test(){ 
ShowList(g_list1); 
cout << endl; 

g_list1.pop_back(); 
ShowList(g_list1); 

} 
/** 
 pop_front()删除链表头的一元素 
*/ 
void pop_front_test(){ 
ShowList(g_list1); 
cout << endl; 

g_list1.pop_front(); 
ShowList(g_list1); 
} 
/** 
 clear()删除所有元素 
*/ 
void clear_test(){ 
ShowList(g_list1); 
g_list1.clear(); 
ShowList(g_list1); 
} 
/** 
 era



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++语言数据结构 串的基本操作实例代码
  • C++语言实现hash表详解及实例代码
  • C++语言 STL容器list总结
  • 通过“回文字算法”复习C++语言
  • C++制作俄罗斯方块
  • C/C++程序编译流程详解
  • C++基础学生管理系统
  • C++语言编写写日志类
  • 解析C++编程中的继承方面的运用
  • C++加密解密php代码的方法

相关文章

  • 2017-05-28c语言随机数函数示例
  • 2017-05-28深入理解C/C++中的写时拷贝
  • 2017-05-28快速学习C语言中for循环语句的基本使用方法
  • 2017-05-28C语言中快速排序和插入排序优化的实现
  • 2017-05-28关于背包问题的一些理解和应用
  • 2017-05-28C语言编程中对目录进行基本的打开关闭和读取操作详解
  • 2017-05-28三种获取网页源码的方法(使用MFC/Socket实现)
  • 2017-05-28用C++类实现单向链表的增删查和反转操作方法
  • 2017-05-28在vs2010中,输出当前文件路径与源文件当前行号的解决方法
  • 2017-05-28C++中点操作符和箭头操作符的使用详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++中const应放在类型前还是后
    • C++入门概览和尝试创建第一个C++程序
    • 实现opencv图像裁剪分屏显示示例
    • C++循环队列实现模型
    • opencv 做人脸识别 opencv 人脸匹配分析
    • C++设计模式之职责链模式
    • c语言实现奇偶排序算法
    • c语言判断是否素数程序代码
    • C++中的friend函数详细解析
    • 浅析C语言头文件和库的一些问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有