2.2 顺序容器-list
list(双向链表)
1)
* :包含头文件list
**:不支持随机存取;增删元素时间是常数,只需要修改指针
2)成员函数
* :vector的成员函数list基本都有
**:以下是部分独有成员函数

sort()算法需要随机访问,故list不支持,所以引入一个成员函数sort()
3)list示例
*
//常用成员函数示例
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
class A{
private:
int n;
public:
A(int n_){
n=n_;
}
friend bool operator<(const A & a,const A & a2);
friend bool operator==(const A & a,const A & a2);
friend ostream & operator<<(ostream & o, const A & a2);
};
bool operator<(const A & a,const A & a2){
return a.n<a2.n;
}
bool operator==(const A & a,const A & a2){
return a.n==a2.n;
}
ostream & operator<<(ostream & o,const A & a){
o<<a.n;
return o;
} template<class T>
void Print(T first,T last){
for(;first!=last;++first)
cout<<*first<<" ";
cout<<endl;
} int main(){ A a[]={,,,,};
A b[]={,,,,,,};
list<A>lst1(a,a+),lst2(b,b+);
lst1.sort(); //sort()此处是成员函数,不是算法
cout<<"1)"; Print(lst1.begin(),lst1.end());
lst1.remove(); //删除和2相等的参数
cout<<"2)";Print(lst1.begin(),lst1.end());
lst2.pop_front(); //删除第一个元素
cout<<"3)"; Print(lst2.begin(),lst2.end());
lst2.unique(); //删除和前一个相等的元素
cout<<"4)"; Print(lst2.begin(),lst2.end());
lst2.sort();
lst1.merge(lst2);//合并lst2到lst1,并删除lst2
cout<<"5)"; Print(lst1.begin(),lst1.end());
cout<<"6)";Print(lst2.begin(),lst2.end()) ;
lst1.reverse(); //前后颠倒
cout<<"7)"; Print(lst1.begin(),lst1.end());
lst2.insert(lst2.begin(),a+,a+);
list<A>::iterator p1,p2,p3;
p1=find(lst1.begin(),lst1.end(),);
p2=find(lst2.begin(),lst2.end(),);
p3=find(lst2.begin(),lst2.end(),);
lst1.splice(p1,lst2,p2,p3);//将[p2,p3)插入p1之前,并从lst2中删除
cout<<"8)";Print(lst1.begin(),lst1.end());
cout<<"9)";Print(lst2.begin(),lst2.end()); return ;
}
**
//list 的约瑟夫问题
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int>monkeys;
int n,m;
while(true){
cin>>n>>m;
if(n==&&m==) break;
monkeys.clear();
for(int i=;i<=n;++i)
monkeys.push_back(i);
list<int>::iterator it=monkeys.begin();
while(monkeys.size()>){
for(int i=;i<m;++i){
++it;
if(it==monkeys.end())
it=monkeys.begin();
}
it=monkeys.erase(it);
if(it==monkeys.end())
it=monkeys.begin();
}
cout<<*it<<endl;
}
return ;
}
此例用vector也可以,因为vector的erase操作牵涉元素的移动,不是常数时间完成,n很大时在速度上有明显差别。
2.2 顺序容器-list的更多相关文章
- C++ 顺序容器基础知识总结
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...
- c++ 顺序容器学习
所谓容器,就是一个装东西的盒子,在c++中,我们把装的东西叫做“元素” 而顺序容器,就是说这些东西是有顺序的,你装进去是什么顺序,它们在里面就是什么顺序. c++中的顺序容器一共有这么几种: vect ...
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...
- C++ 顺序容器
<C++ Primer 4th>读书笔记 顺序容器内的元素按其位置存储和访问.容器类共享公共的接口,每种容器类型提供一组不同的时间和功能折衷方案.通常不需要修改代码,只需改变类型声明,用一 ...
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...
- 顺序容器:vector,deque,list
1.顺序容器:vector,deque,list 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器 ...
- C++ Primer 随笔 Chapter 9 顺序容器
参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...
- C++ Primer 5th 第9章 顺序容器
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...
随机推荐
- Svn版本控制工具的作用和应用
一. 可解决如下问题: 1. 不小心删除了自己的项目文档和源代码文件 2. 不敢修改自己的源代码文件 3. 不知道如何把自己的项目文档传递给他人 4. 不知 ...
- Unity 用户手册用户指南二维纹理 (Texture 2D)
http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...
- [BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统
[BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- hihoCoder 1303 数论六·模线性方程组
Description 求解模线性方程组, \(m_i\) 不互质. Sol 扩展欧几里得+中国剩余定理. 首先两两合并跟上篇博文一样. 每次通解就是每次增加两个数的最小公倍数,这对取模任意一个数都是 ...
- QT 信号与槽connect
QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...
- Java BigDecimal使用
//除法:精确到后4位BigDecimal a = new BigDecimal(1213); BigDecimal b = new BigDecimal(10302); BigDecimal rat ...
- Hibernate 多对多关联映射, 中间表加查询条件
package com.coracle.yk.xpo.po.base; import java.util.Date; import java.util.HashSet; import java.uti ...
- C#系统委托之Action And Func
Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...
- Java总结(二):继承——Inheritance
关于继承: 1.为了重用代码——引入继承. 2.父类的某些方法反正要被重写,在父类里实现在也无用——引入抽象类. 3.把抽象类里的抽象方法抽出来——引入接口.