初步STL集装箱List

List

特点:

1.它实质上是一个双向链表

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpYW9idXB0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

2.使用时包括<list>头文件 #include<list>

3.不支持随机訪问迭代器,仅仅能使用双向迭代器  //因此不能使用一些算法和运算符操作

4.在不论什么位置的插入、删除操作都是常数时间

成员函数

初始化

list <int> intlist0;              // 创建空的 intlist

list <int> intlist1( 3 );       //包括3个元素

list <int> intlist2( 5, 2 );   //包括5个元素,每一个都为2

訪问操作


front()


返回第一个元素 (不检查容器是否为空)


back()


返回最后一个元素(不检查容器是否为空)


pop_back()


添加一元素到链表尾


pop_front()


添加一元素到链表头


push_back()


删除链表尾的一个元素


push_front()


删除链表头的一元素


assign()


擦除链表中的元素并把新的元素拷贝到目标链表中


empty()


推断链表是否为空。假设是空,返回true。

举例:

#include <iostream>
#include <list>
using namespace std;

int main()
{
	list<int> intlist;
	list<int>::iterator intiter;
	list<int>::reverse_iterator intriter;
	if(intlist.empty())
		cout<<"intlist为空"<<"\n";   //为空

	intlist.assign(4,1);
	cout<<"运行assign(4,1)后,intlist:";
	for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
		cout<<*intiter;
	cout<<"\n";               //输出1111

	cout<<"intlist.front :";
	cout<<intlist.front();
	cout<<"\n";                //输出1

	cout<<"intlist.back :";
	cout<<intlist.back();
	cout<<"\n";	              //输出1

	intlist.push_back(5);
	intlist.push_front(9);
	cout<<"运行push_back和push_front:";
	for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
		cout<<*intiter;
	cout<<"\n";                  //输出911115

	cout<<"反向输出 :";
	for(intriter=intlist.rbegin();intriter!=intlist.rend();++intriter)
		cout<<*intriter;
    cout<<"\n";
                                  // 输出511119
	intlist.pop_back();
	intlist.pop_back();
	intlist.pop_front();
	intlist.pop_front();
	cout<<"运行2次pop_back和2次pop_front :  ";
	for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
		cout<<*intiter<<"  ";
	cout<<"\n";
                                         //输出11
	getchar();
	return 0;
}

操作list里的元素


clear()


从容器中删除全部元素


erase(position)


删除由position指定的位置上的元素


erase(beg,end)


删除从beg到end-1之间的全部元素


insert(position, elem)


将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置


inser(position, n, elem)


将elem的n个拷贝插入到由 position指定的位置上


insert(position, beg, end)


将从beg到end-1之间的全部元素的拷贝插入到vecList中由position指定的位置上


resize(num)


将元素个数改为num。

假设size()添加。默认的构造函数负责创建这些新元素


resize(num, elem)


将元素个数改为num。

假设size()添加。默认的构造函数将这些新元素初始化为elem


size()


链表当前的元素个数

list的一些算法


merge()


lst1.merge (lst2);  //合并 lst2到lst1并清空lst2


sort()


对链表排序,默认升序


reverse()


反转链表


remove()


删除链表中所有匹配值的元素


splice()


对两个链表进行结合,结合后第二个链表清空


unique()


删除相邻反复元素

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
    list<int> L(5,2);
    list<int> ::iterator pl;

    L.unique();
    for(auto i=L.begin();i!=L.end();i++)
        cout<<*i;   //输出2
    cout<<endl;

    list<int> L1{1,3,2,5,4};
    for(auto i=L1.begin();i!=L1.end();i++)
        cout<<*i;   //输出13254
    cout<<endl;
    L1.sort();
    for(auto i=L1.begin();i!=L1.end();i++)
        cout<<*i;   //输出12345
    cout<<endl;

    L1.reverse();
    for(auto i=L1.begin();i!=L1.end();i++)
        cout<<*i;   //输出54321
    cout<<endl;

    L1.push_back(3);
    for(auto i=L1.begin();i!=L1.end();i++)
        cout<<*i;   //输出543213
    cout<<endl;
    L1.remove(3);
     for(auto i=L1.begin();i!=L1.end();i++)
        cout<<*i;   //输出5421
    cout<<endl;

    list<int>  L2(1);
    L2.merge(L1);
      for(pl=L2.begin();pl!=L2.end();pl++)
        cout<<*pl;   //输出05421
    cout<<endl;

    list<int>  L3{1,2,3,4,5,6,7,8}; //假设想把这里面的1234截到L2的05之间
    auto p1 = find(L3.begin(),L3.end(),1);  //截取的过程中包含左不包含右
    auto p2 = find(L3.begin(),L3.end(),5);
    auto p3 = find(L2.begin(),L2.end(),5);  //将该位置极其以后的元素皆后移一位
    L2.splice(p3,L3,p1,p2);
    for(pl=L2.begin();pl!=L2.end();pl++)
        cout<<*pl;   //输出012345421
    cout<<endl;
    for(pl=L3.begin();pl!=L3.end();pl++)
        cout<<*pl;   //输出5678
    cout<<endl;

    return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2025-01-15 08:29:38

初步STL集装箱List的相关文章

初步STL集装箱Vector

vector 特点: 1.可变长的动态数组 2.使用时包括头文件 #include <vector> 3.支持随机訪问迭代器 ? 依据下标随机訪问某个元素时间为常数 ? 在尾部加入速度非常快 ? 在中间插入慢 成员函数 初始化 vector(); 初始化成空 vector(int n); 初始化成有n个元素 vector(int n, const T & val); 初始化成有n个元素, 每一个元素的值都是val,类型是T vector(iterator first, iterator

初步STL该容器适配器

容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> ? 栈 -- 后进先出 2) queue: 头文件 <queue> ? 队列 -- 先进先出 3) priority_queue: 头文件 <queue> ? 优先级队列 -- 最高优先级元素总是第一个出列 注: 容器适配器上没有迭代器 STL中各种排序, 查找, 变序等算法都不适合容器适配器 Stack 特点 1.stack 是后进先出的数据结构

hdu 4858 项目管理(STL集装箱)

项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 730    Accepted Submission(s): 258 Problem Description 我们建造了一个大项目! 这个项目有n个节点,用非常多边连接起来.而且这个项目是连通的! 两个节点间可能有多条边,只是一条边的两端必定是不同的节点. 每一个节点都有一个能量

UVA 10474:Where is the Marble?(STL初步)

 Where is the Marble?  Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on them. At the beginning, Raju would place the marbles one after another in ascending order of the numbers written on them. Then Mee

(STL初步)不定长数组:vector

STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作"封装"在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a.size()读取它的大小,a.resize()改变它的大小,a.push_back()向尾部添加元素,a.pop_back()删除最后一个元素.2对数组的操作有:a.clear()清空,a.empty()测试是否为空. vectors是一个模板类. 它的使用声明:vetor<int&

【STL初步】不定长数组:vector + 集合:set + 映射:map

一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的动态数组 vector<char> a //定义 a 为一个char 类型的动态数组 vector<data> c //其中data为自定义的数据类型,可以为结构体  指令 a[i] ---- 返回动态数组中的第i个元素a.empty() ---  若动态数组为空,则返回true,否则

STL 小白学习(1) 初步认识

1 #include <iostream> 2 using namespace std; 3 #include <vector> //动态数组 4 #include <algorithm>//算法 5 6 void PrintVector(int v) { 7 cout << v<<" "; 8 9 } 10 11 /* 12 STL 13 容器算法迭代器 14 基本语法 15 */ 16 void test01() { 17

初涉算法——STL初步

一.头文件<algorithm> ①sort函数 sort使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才需要传入额外的比较函数: sort可以给任意对象排序(不一定是内置类型,由此可见sort是模板函数),前提是类型需要定义"小于"运算符,或者在排序时传入一个"小于"函数: 排序对象若存在普通数组中,则用sort(a, a+n)的方式调用: 排序对象若存在vector中,则用sort(v.begin(), v.end()).

STL适配器的初步理解

c++中的适配器有三种:容器适配器,迭代器适配器,函数适配器.下面一一介绍: 1.容器适配器:因为这些容器都是基于其他标准容器实现的所以叫做容器的适配器,具体的有stack,queue,priority_queue,默认的情况下,stack和queue基于deque而实现的,,priority_queue在vector上实现的,可以根据第二个实参指定容器的类型,但一定要符合标准,queue要求要有push_front操作因此不能建立在vector上面,priority_front要求有随机访问的