STL基础(二)
来源:互联网 发布:cf免费卡枪带软件 编辑:程序博客网 时间:2024/06/05 03:46
- 容器:
用来管理一组元素。
序列式容器:
vector
将元素置于一个动态数组中加以管理。
可以随机存取元素,用索引直接存取。
数组尾部添加或移除元素非常快,但是在中部或头部安插元素比较费时。
// this is the part of vector int a[5] = {1,2,3,4,5}; vector<int> coll(a,a+5); for (int i=6;i<=10;i++) { coll.push_back(i); } for (int i=0;i<coll.size();i++) { cout<<coll[i]<<" "; }
deque
是”double-ended queue”的缩写
可以随机存取元素(用索引直接存取)
数组头部和尾部添加或移除元素都非常快,但在中部安插元素比较费时。
deque<float> deques; for (int i = 1;i<=6;i++) { deques.push_front(i*1.1); } for (int i=0;i<deques.size();i++) { cout<<deques[i]<<" "; }
List双向链表
不提供随机存取,按顺序走到需存取的元素。O(n)
在任何位置上执行插入或删除动作都非常迅速,内部只需要调整一下指针。
list<char> lists; for (char c = 'a';c<='z';c++) { lists.push_back(c); } while(lists.empty()==false) { cout<<lists.front(); lists.pop_front(); }
迭代器(Iterator)
通过迭代器,我们可以使用相同的方式来访问,遍历容器。
使用方法如下:
int ai[5] = {1,2,3,4,5};vector<int> ivec(ai,ai+5);vector<int>::iterator iter;for(iter = ivec.begin();iter!=ivec.end();++iter) cout<<*iter<<" ";
每种容器都必须提供自己的迭代器。
迭代器的概念:
1. 迭代器是一个“可遍历STL容器内全部或部分元素”的对象
2. 一个迭代器指出容器中的一个特定位置。
3. 具有遍历复杂数据结构的能力。
迭代器的基本操作有:
- Operator* :返回当前位置上的元素值,如果该元素拥有成员,你可以通过迭代器,直接使用operator->取用他们。
- Operator++,将迭代器前进至下一个元素,大多数迭代器还可以使用operator–,退回到前一个元素。
- operator==和operator!=
判断两个迭代器是否指向同一位置。
- operator=
为迭代器赋值。
class Student{public: int no; string name; Student(int no,string name) { this->no = no; this->name = name; }};int _tmain(int argc, _TCHAR* argv[]){ list<Student> lists; for (int i =0;i<10;i++) { char name[20]; sprintf_s(name,"csl%d",i+1); Student stu(i+1,name); lists.push_back(stu); } list<Student>::iterator iter; for (iter=lists.begin();iter!=lists.end();++iter) { cout<<(*iter).name<<"---"<<iter->name<<endl; iter->no = iter->no *2; } for (iter=lists.begin();iter!=lists.end();++iter) { cout<<(*iter).no<<"---"<<iter->no<<endl; } getchar(); return 0;}
需要说明两点:第一:当迭代器拥有的元素有成员时,可以使用operator->直接取用或者调用。
第二:当需要将实数与字符串进行拼接的时候,可以使用如下的方式:
char name[20];
sprintf_s(name,”csl%d”,i+1);
char * 转string是可以直接进行转换的。
- 关联式容器
Sets/Multisets
内部的元素依据其值自动排序。
Set内相同数值的元素只能出现一次,Multiset内可包含多个数值相同的元素,内部由二叉树实现(具体来说,就是红黑树),便于查找。
typedef set<int> IntSet; set<int> coll; coll.insert(1);//没有push_back。因为他是自动排序的 coll.insert(6); coll.insert(2); coll.insert(4); coll.insert(3); coll.insert(6); IntSet::const_iterator pos; for (pos=coll.begin();pos!=coll.end();++pos) { cout<<*pos<<" ";//迭代器输出的时候是有序遍历的 }
输出结果为: 1 2 3 4 6
Maps/Multimaps
Map的元素是成对的键值对,内部的元素依据其值自动排序。
map内相同数值的元素只能出现一次,multimap内可包含多个数值相同的元素。
内部由二叉树实现。便于查找。
容器的共通操作:
初始化:
list< int > l;
vector< int > ivec(l.begin(),l.end());
..
int array[]= {1,2,3,4};
set< int > iset(array,array+sizeof(array)/sizeof(array[0]));
- STL基础(二)
- STL入门基础(二)
- c++ 工程基础之STL系列 (二) list
- c++STL基础部分(二) 之模板
- STL学习(二)
- 学习STL(二)
- c++ STL(二)
- 82 stl(二)
- STL迭代器(二)
- STL基础(三)
- STL 源码分析之string(二)基础篇—append,reserve,assign
- STL学习笔记(二)
- 强大的STL(二)
- STL 快速入门(二)
- stl的complex(二)
- C++ STL容器(二)
- stl变易算法(二)
- STL内存管理(二)
- POJ 2182 Lost Cows
- 向量夹角顺时针或逆时针,交叉口向左拐向右拐的问题
- 第3章 操作符
- Kinect基础之在WinForm(C#)中显示彩色数据和深度数据
- Leetcode-minimum-depth-of-binary-tree
- STL基础(二)
- 第4章 控制执行流程
- MongoDB主从复制
- 垃圾ac自动模板
- 第5章 初始化与清理
- EL表达式
- Mac添加环境变量全面解读
- 【JZOJ4597】现世斩
- 今天装逼只为明天引爆,小众营销不要死在大众路上