List双向链表容器
list 容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线 性表,这样,对链表的任一位置的元素进行插入、删除和查找都是极快速的。
图 2-7 是 list 采用的双向循环链表的结构示意图。
由于 list 对象的节点并不要求在一段连续的内存中,所以,对于迭代器,只能通过“++” 或“- -”的操作将迭代器移动到后继/前驱节点元素处。而不能对迭代器进行+n 或-n 的操 作,这点,是与 vector 等不同的地方
代码如下:
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
//创建空链表
list<int> l;
//创建具有n个元素的链表
list<int> l1();//创建具有10个元素的链表
//三种方法插入新的元素
//采用push_back()方法往尾部插入新元素,链表自动扩张。
//采用push_front()方法往首部插入新元素,链表自动扩张
//采用insert()方法往迭代器位置处插入新元素,链表自动扩张。
//迭代器只能“++”或“--”操作,不能进行+n或-n操作
//链表尾部插入新元素
l.push_back();
l.push_back();
l.push_back();
//链表头部插入新元素
l.push_front();
//在任意位置插入新元素
list<int>::iterator it;
it=l.begin();
it++;
l.insert(it,);
//使用前向迭代器遍历链表
list<int>::iterator it1;
for(it1=l.begin();it1!=l.end();it1++){
cout<<*it1<<" ";
}
cout<<endl;
//反向遍历用反向迭代器reverse_iterator
list<int>::reverse_iterator rit;
for(rit=l.rbegin();rit!=l.rend();rit++){
cout<<*rit<<" ";
}
cout<<endl;
//可以使用remove()方法删除链表中一个元素,值相同的元素都会被删除。
l.remove();
//使用pop_front()方法删除链表首元素,使用pop_back()方法删除表尾元素。
l.pop_front();
l.pop_back();
//使用erase()方法删除迭代器位置上的元素。
list<int>::iterator it2;
it2=l.begin();
it2++;
l.erase(it2);
//元素查找,返回迭代器的位置,没有找到,返回end()的位置
list<int>::iterator it3;
it3=find(l.begin(),l.end(),);
if(it3!=l.end()){
cout<<"find it"<<endl;
}
else
{
cout<<"not find it"<<endl;
}
//元素排序sort()
l.sort();
//剔除重复元素unique(),只保留一个
l.unique();
//清空链表,clear()
l.clear();
return ;
}
List双向链表容器的更多相关文章
- list双向链表容器(常用的方法总结)
特别注意,由于list对象的结点并不要求在一段连续的内存中,所以,对于迭代器,只能通过++或者--的操作将迭代器移动到后继或者前驱结点元素处.而不能对迭代器进行+n或者-n的操作,这点与vector等 ...
- stl之list双向链表容器应用基础
不同于採用线性表顺序存储结构的vector和deque容器.list双向链表中任一位置的元素差值.插入和删除,都具有高效的常数阶算法时间复杂度O(1). 头文件 #include<list> ...
- 2_STL容器
STL算法的精髓在于 算法的 返回值!!! String: string是STL的字符串类型,通常用来表示字符串:C语言中一般用char* char*字符指针;string是类封装了char*,管 ...
- STL学习系列六:List容器
List简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.it++(ok), it+5(err) #include ...
- nginx学习六 高级数据结构之双向链表ngx_queue_t
1 ngx_queue_t简单介绍 ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配.它仅仅有两个指针负责把数据链入链表.它跟stl提供的qu ...
- STL - list(双向链表)
List简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err) #include & ...
- 05--STL序列容器(List)
一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...
- STL之List容器
1.List容器 1) list是一个双向链表容器,可高效地进行插入删除元素. 2)list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err) 3)头 ...
- STL常用容器使用方法
在程序头部使用#include<stack>来引入STL的stack容器,然后使用stack<int> s语句来声明一个管理整型数据的容器s.stack常用成员函数:push( ...
随机推荐
- ios点击输入框,界面放大解决方案
当我们编写的input宽度没有占满屏幕宽度,而且又没有申明meta,就会出现点击输入框,界面放大这个问题. 下面我直接给出解决方案: <meta name="viewport" ...
- [转帖]Linux 硬件和系统配置查看命令小结
https://blog.csdn.net/strongwangjiawei/article/details/8208825 转帖了不少 发现自己记住的还是不多.. Linux 硬件和系统配置查看命令 ...
- CMake--常用指令
1 . ADD_DEFINITIONS 向 C/C++ 编译器添加 -D 定义,比如 在CMakeList.txt文件中添加: ADD_DEFINITIONS(-DENABLE_DEBUG -DABC ...
- Java8 Hash改进/内存改进
又开新坑o(*≧▽≦)ツ讲讲几个Java版本的特性,先开始Java8, HashMap的改进 HashMap采用哈希算法,先使用hashCode()判断哈希值是否相同,如果相同,再使用equals() ...
- hive条件函数
case相当于if,when相当于=:then是条件满足的结论.否则实行else后语句,一end结束
- VMware与CentOS的安装与Linux简单指令
一 . VMware与CentOS系统安装 下载CentOS系统的ISO镜像 # 官方网站,国外网站,下载速度会很慢 www.centos.org # 由于国外的下载速度慢,我们可以使用国内的镜像源 ...
- python之路--初识面向对象
一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...
- python之路-列表、元组、range
一 . 列表 # 列表的定义 列表就是能装对象的对象 在python中用[ ]来描述列表,内部元素用逗号隔开,对数据类型没有要求 索引和切片 lst = ["天龙八部", &quo ...
- python设计模式第十七天【解释器模式】
1.应用场景 (1)解释预先定义的文法 2.代码实现 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from abc import ABCMeta, abs ...
- 老男孩python学习自修【第二天】字符串用法
实时处理增量日志最佳实践 主要使用f.seek()和f.tell()实现 字符串处理函数: s.find(substr, start, end) 查找子字符串,找不到则返回-1,找到则返回对应的索引 ...