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) 读取固定数量的单词,将它们按字典序插入到容 ...
随机推荐
- Linux的五个查找命令
1. find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> ...
- Caffe学习系列(10):命令行解析
训练网络命令: sudo sh ./build/tools/caffe train --solver=examples/mnist/train_lenet.sh 用预先训练好的权重来fine-tuni ...
- Hashtable和HashMap的区别举例
我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable ...
- 使用srvany.exe将任何程序作为Windows服务运行
使用srvany.exe将任何程序作为Windows服务运行 2011 年 3 月 7 日 !本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使 ...
- NOI2009 诗人小G
Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...
- ubuntu linux 下wine的使用
ubuntu linux 下wine的使用 之前写了一篇 ubuntu15.10下编译安装wine1.8rc4 这一篇是来写它的使用的. 1.安装Wine支持包 现在,需要安装非开源(但免费)的支持包 ...
- vim帮助手册汉化
vim帮助手册汉化 vim帮助手册汉化 下载vimcdoc-1.9.0.tar.gz 安装vimcodc-1.9.0 vim命令模式下输入help可以查看vim的帮助手册.美中不足的是这个帮助手册是英 ...
- GFF3格式
GFF3是GFF注释文件的新标准.文件中每一行为基因组的一个属性,分为9列,以TAB分开. 依次是: 1. reference sequence:参照序列 指出注释的对象.如一个染色体,克隆或片段.可 ...
- python 正则表达式点号与'\n'符号的问题
遇到了一个小虫,特记录之. 1.正则表达式及英文的处理如下: >>> import re >>> b='adfasdfasf<1safadsaf>23w ...
- CentOS 6.4 搭建git 服务器
CentOS 6.4 搭建git 服务器 (2013-11-22 19:04:09)转载▼ 标签: it 分类: Linux 此文件是依据markdown所编写,更好效果参见本人github的文档ht ...