C++中 STL list详解及简单实例

C++中 STL list详解

1、List: 内部实现是一个双向链表,可以高效的进行插入删除,但不能够进行随机访问

2.、示例程序:

#include "stdafx.h"
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
using namespace std;
const int num[5] = {1,3,2,4,5};
bool status(const int & value)
{
 return value>6?true:false;
}
int _tmain(int argc, _TCHAR* argv[])
{
 list<int> list1;
 copy(num,num+5,back_insert_iterator<list<int>>(list1));
 copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 list1.sort(greater<int>());//5 4 3 2 1
 copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 list<int>::iterator it = list1.begin();
 while (it != list1.end())
 {
  (*it) += 2;
  it++;
 }
 //7 6 5 4 3
 list<int>::reverse_iterator re_it = list1.rbegin();
 cout<<"从后向前输出: ";
 while (re_it != list1.rend())
 {
  cout<<*re_it<<" ";
  re_it++;
 }
 cout<<endl;
 list1.reverse();// 3 4 5 6 7
 list1.push_back(8);//3 4 5 6 7 8
 list1.pop_front();//4 5 6 7 8
 list1.remove(6);//4 5 7 8
 list1.remove_if(status);// 4 5
 list1.resize(4);// 4 5 0 0
 list1.resize(6,1);// 4 5 0 0 1 1
 list1.unique();//4 5 0 1
 copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 list1.clear();
 cout<<"当前list1含有元素个数:"<<list1.size()<<endl;
 list1.push_back(7);//list1:7
 list<int> list2(3,2);//2 2 2
 list2.merge(list1,greater<int>());//list2: 7 2 2 2
 list2.insert(++list2.begin(),3);//list2: 7 3 2 2 2
 list2.swap(list1);//list1:7 3 2 2 2 list2:empty
 list1.erase(++list1.begin(),list1.end());// 7
 copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," "));
 cout<<endl;
 system("pause");
}

运行结果图片:

3、List 方法 


list成员


说明


constructor


构造函数


destructor


析构函数


operator=


赋值重载运算符


assign


分配值


front


返回第一个元素的引用


back


返回最后一元素的引用


begin


返回第一个元素的iterator


end


返回最后一个元素的下一位置的iterator


rbegin


返回链表最后一元素的后向指针reverse_iterator


rend


返回链表第一元素的下一位置的reverse_iterator


push_back


增加一个数据到链表尾


push_front


增加一个数据到链表头


pop_back


删除链表尾的一个元素


pop_front


删除链表头的一元素


clear


删除所有元素


erase


删除一个元素或一个区域的元素(两个重载)


remove


删除链表中匹配值的元素(匹配元素全部删除)


remove_if


删除条件满足的元素(遍历一次链表),参数为自定义的回调函数


empty


判断是否链表为空


max_size


返回链表最大可能长度


size


返回链表中元素个数


resize


重新定义链表长度(两重载函数)


reverse


反转链表


sort


对链表排序,默认升序


merge


合并两个有序链表并使之有序


splice


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


insert


在指定位置插入一个或多个元素(三个重载函数)


swap


交换两个链表(两个重载)


unique


删除相邻重复元素

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • C++ STL入门教程(7) multimap、multiset的使用

    一.multimap(一对多索引) C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素. 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include <map> #include <string> #include <iostream> using namespace std; int main() { ///1. 初始化 multimap<int, st

  • C++ STL入门教程(3) deque双向队列使用方法

    一.简介 deque(Double Ended Queues,双向队列)和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样). 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <deque> #include <iostream> #include <algorithm> #include <stdexcept> using namespace std; void print(int num) { cout <&

  • C++ STL入门教程(1) vector向量容器使用方法

    一.简介 Vectors 包含着一系列连续存储的元素,其行为和数组类似. 访问Vector中的任意元素或从末尾添加元素都可以在O(1)内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是O(N). 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <vector> #include <iostream> #include <algorithm> #include <stdexcept> using namespace

  • C++ STL list 遍历删除出错解决方案

    C++ STL list 遍历删除崩溃 错误用法一 下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602 表明it不能再作为迭代器进行运算,自然会报错. #include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR*

  • C++ STL入门教程(6) set(集合)的使用方法

    一.简介 集合(Set)是一种包含已排序对象的关联容器,不允许有重复元素. 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <set> #include <iostream> using namespace std; int main() { ///1. 初始化 set<int> num; set<int>::iterator iter; cout << num.max_size() << endl;///s

  • C++ STL入门教程(2) list双向链表使用方法(附程序代码)

    一.简介 "Unlike other standard sequence containers, list and forward_list objects are specifically designed to be efficient inserting and removing elements in any position, even in the middle of the sequence." Lists将元素按顺序储存在链表中.与向量(vector)相比, 它允许快速

  • zlib库压缩和解压字符串STL string的实例详解

    zlib库压缩和解压字符串STL string的实例详解 场景 1.一般在使用文本json传输数据, 数据量特别大时,传输的过程就特别耗时, 因为带宽或者socket的缓存是有限制的, 数据量越大, 传输时间就越长. 网站一般使用gzip来压缩成二进制. 说明 1.zlib库可以实现gzip和zip方式的压缩, 这里只介绍zip方式的二进制压缩, 压缩比还是比较可观的, 一般写客户端程序已足够. 2.修改了一下zpipe.c的实现, 其实就是把读文件改为读字符串, 写文件改为写字符串即可. 例子

  • C++中 STL list详解及简单实例

    C++中 STL list详解 1.List: 内部实现是一个双向链表,可以高效的进行插入删除,但不能够进行随机访问 2..示例程序: #include "stdafx.h" #include <iostream> #include <list> #include <iterator> #include <algorithm> using namespace std; const int num[5] = {1,3,2,4,5}; boo

  • 微信小程序中input标签详解及简单实例

    微信小程序中input标签详解及简单实例 使用input标签,我们都会,在微信小程序中使用,必定也是可以一下子就会的,但是却有些常用的属性无法按照习惯去使用: 我就用我最常用的来做例子: 一个一个来解读: 首先,我是定义了他的id,这是我们最常用的,所以就配了一个id,毕竟不操作他,又为什么设成输入框呢, 第二,设置他的样式, 第三,设置他的输入类别,以上都是很简单的 第四.使用正则l:哎限定输入为纯数字.这点可能有点不理解,这是对他的keyup事件监听,将不是纯数字的list无视掉.注意,是对

  • C++ 中回调函数详解及简单实例

    C++ 中回调函数详解及简单实例 回调函数调用关系图 对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数. 对于第二种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数.主程序不知道宿主函数什么时候调用回调函数,因为调用函数启动了线程,这样,主程序就不必关心宿主函数什么时候调用回调函数了,主程序可以释放出来做自己的事了. 代码示例 #include <stdio.h> typedef void(*lpFunc

  • java 中cookie的详解及简单实例

    java 中cookie的详解 Java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下 HttpServletRequest request HttpServletResponse response Cookie cookie = new Cookie("cookiename","cookievalue&

  • Java中的泛型方法详解及简单实例

      java 泛型方法: 泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test<T>{}.这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类型,例如:Test<Object> t = new Test<Object>();,指明泛型T的类型为Object. 但是Java中的泛型方法就比较复杂了. 泛型类,是在实例化类的时候指明泛型的具体类型:泛型方法,是在调用方法的时候指明泛型的具体类型.   定

  • Spring中@Async用法详解及简单实例

    Spring中@Async用法 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法. 1.  何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果. 异步调用则是只是发送了调用的指令,调用者无需

  • 微信小程序中的onLoad详解及简单实例

    微信小程序中的onLoad onLoad是一个生命周期函数,表示页面加载 onLoad默认有一个Object类型的参数,是指其他页面打开当前页面所调用的 query 参数 举个栗子~ 当我们在页面first的js脚本中有一个点击方法onTap 当点击时页面跳转到second页面,用?id = secondId的形式为second页面传递一个值(这里的secondId是一个已经获取过的值) onTap: function(){ wx.navigateTo({ url: "second?id=&qu

  • java 中Collection存储器详解及简单实例

    本篇仅为了巩固一下基础,回忆一下存储的这两个常用的东东- 一.Collection 1.存储对象可以考虑:①数组②结合 2.数组存储对象的特点:Student[] stu = new Student[20]; stu[0] = new Stutdent();-- 弊端:①一旦创建,其长度不可变 ②真实的数组存放的对象的个数是不可知的 3.集合 Collection接口     丨------List接口:存储有序,可以重复的元素         丨-------ArrayList(主要的实现类,

  • Android 应用中插入广告详解及简单实例

    想必大家都知道,国内的Android应用基本都是免费的,那么开发者如何获得收入呢?应用中插入广告是一个比较常用的盈利手段.本文就讲解如何在Android应用中插入广告. 国内的广告平台有很多,用户数量比较多的有万普,有米,多普.下面就不一一介绍了,免得说我打广告.本文以万普为例. 1.首先去万普官网下载sdk,把sdk里面的jar包导入到项目的lib目录下.        2.修改AndroidManifest.xml文件. 确保应用具有以下几项权限: XML/HTML代码 <uses-perm

  • linux 中open()函数详解及简单实例

    open()函数创建文件时便捷的权限设置 头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 函数原型 int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 当flags参数包含O_REEAT时,需要对mode参数进行指定 S_IRWXU,

随机推荐