码迷,mamicode.com
首页 > 编程语言 > 详细

c++顺序容器(1)

时间:2016-03-10 23:37:36      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

1.顺序容器 C++标准库中有三种顺序容器:vector list deque vector:支持快速随机访问,在尾部之外的位置插入或删除元素可能较慢 list:支持快速插入/删除,只支持双向顺序访问 deque:双端队列,支持快速随机访问,头尾插入和删除速度很快 还有array(不能添加和删除),forward_list,String(保存字符)

2.哪种顺序容器好? 通常,使用vector。 (1)如果要求在容器的中间插入和删除元素,应使用list或forward_list。 (2)如果只在头尾位置插入和删除元素,则使用deque

 3.容器库 顺序类型基本能保存任意类型的元素,也可以定义一个容器,其元素为另一个容器: vector<vector<string>> lines; 容器操作: C c; 默认构造函数,构造空容器 C c1(c2); 构造c2的拷贝c1 赋值: c1=c2; 将c1中的元素替换为c2中元素 a.swap(b); 交换a和b 大小: c.size(); c中元素的数目 添加/删除元素: c.insert(args); 拷贝args进c 关系运算符: ==,!= 所有容器都支持 <,<=,>,>= 不支持无序关联容器 获取迭代器: c.begin(),c.end(); 返回迭代器

4.迭代器 迭代器范围:一个迭代器范围与一对迭代器表示,通常用begin和end表示或者first和last,标记了容器中元素的一个范围。一般last指向尾元素之后的位置。 迭代器范围中的元素包括从first开始到last(不包含last)之间的所有元素。这种范围称为左闭合区间[first,last). while(first!=last){ *first=val; ++first;}//可用类似代码来处理一个元素范围。 vector和deque将元素在内存中连续保存,list则将元素以链表方式存储,因此前者可实现迭代器的大小比较,后者不支持只能用!=、==。

5.容器类型成员 每个容器定义了多个类型。如size_typeiteratorconst_iterator.如: list<string>::iterator iter;//通过list<string>定义一个迭代器类型

6.begin和end成员 带r的版本返回反向迭代器,带c的返回const迭代器,如 list<string> a; auto it1=a.rbegin();//list<string>::reverse_iterator auto it2=a.crbegin();//list<string>::const_reverse_iterator

7容器定义和初始化 C c; C c1(c2); C c1=c2;C c{a,b,c...}; 只有顺序容器的构造函数才能接受大小参数n,如C seq(n); (1)拷贝初始化 当传递迭代器参数来拷贝一个范围时,就不要求容器类型是相同的了。而且,新容器和原容器的元素类型也可以不同,只要能将拷贝的元素转换。例如 list<string> authors; vector<const char*> articles; deque<string> authlist(authors);//容器类型不匹配 vector<string> words(articles);//容器类型必须匹配 forward_list<string> words(articles.begin(),articles.end());//可将const char*转化为string。 也可用it代替articles.end()(it代表authors中的一个元素) (2)列表初始化 (3)与顺序容器大小相关的构造函数 (4)标准库array具有固定大小 比如定义array时,不仅要指定元素类型也要指定容器大小 array<int,42> 虽然不能对内置数组类型进行拷贝,但是array没有这种限制。如: int dig[10];int cpy[10]=dig;//错误 array<int,10> digs; array<int,10> copy=digs;

8.赋值和swap swap(c1,c2);交换c1和c2中的数据,比c2向c1拷贝快的多 vector <string> sve1(10);vector<string> sve2(24); swap(sve1,sve2);//交换后sve1中有24个元素,sve2中有10个元素(相当于交换了容器外壳) assign用于替换元素,不适用于关联容器和array。用于已经声明的容器。 seq.assign(b,e);//将seq中的元素替换为迭代器b和e表示的范围的元素。 9.容器大小操作 size,empty,max_size; forward_list支持max_size和empty,不支持size

10.关系运算符 如果两个容器一样大小,且元素顺序相等,容器相等。 容器大小不同,元素相等,较小容器小于较大容器。 其余情况取决于第一个不同元素大小比较结果。 猪:只有当元素类型定义了相应的比较运算符是,我们才可以使用关系运算符来比较两容器。

c++顺序容器(1)

标签:

原文地址:http://www.cnblogs.com/sccy-study/p/5263715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!