c++顺序容器(1)

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

时间: 2025-01-02 13:59:24

c++顺序容器(1)的相关文章

第十篇:顺序容器vector,deque,list的选用规则

前言 常见的顺序容器主要有三种 - vector,deque,list.它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题. 分析 由于这三种容器实现的数据结构原型不同(vector实现原型是顺序表,deque是双端队列,list是链表),因此这三种容器对插入删除以及访问操作的开销是不同的.为了编制出高效的程序,我们应当通过分析容器操作的开销来选择容器. 访问操作对容器选择的影响 1. vector容器的随机访问效率最高: 2. deque容器的随机访问效率也高: 3

顺序容器

C++顺序容器 1.C++的顺序容器包括:vector.list.deque. 2.初始化顺序容器的5中方法: (1)Create an empty container: list<string> slist; vector<int> vec; (2)Create a container of some size. Each element is initialized to its default value.(Recall that the default value for

C++primer(第五版)第九章 顺序容器(容器的运用及其部分习题解答,C++11特性总结,重点章节内容较多)

顺序容器:为程序员提供了控制元素存储和访问顺序的能力.(无序容器)           1.顺序容器的概述           A.顺序容器的类型           vector:可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢.          deque:双端队列.支持快速随机访问.在头尾位置插入/删除速度很快.           list:双向链表.只支持双向顺序访问.在list中任何位置进行插入/删除操作速度都很快.          forword_list

顺序容器(二)--《C++ primer》

 前面已经简单介绍了顺序容器的定义以及一些操作,包括(添加,删除等),下面主要集中以代码的形式简单介绍一下相关用法,首先创建并初始化vector对象,一般有两大类: 1.分配指定数目元素,并初始化(分两种)          vector<int> ivec(10): vector<int> ivec(10,1): 2.把vecotr对象初始化为一段元素的副本 int a[10]={1,2,3,4,5,6,7,8,9,10}: vector<int> ivec(a,

c++顺序容器(2)

1.向顺序容器添加元素 c.push_back(t);c.emplace_back(args);//在c的尾部创建一个值为t或由args创建的元素,返回void.若在头部,back改为front c.insert(p,t);c,emplace(p,args);   c.insert(p,n,t);(插入n个)  c.insert(p,b,e);(迭代器范围) c.insert(p,i1);(列表) 注:a.除array和forward_list外,每个顺序容器都支持push_back. b.只有

C++ Primer 第九章顺序容器

一.综述 <vector>:可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢. <deque>:双端队列.支持快速随机访问.在头尾位置插入/删除速度很快. <list>:双向链表.只支持双向顺序访问.在list中任何位置进行插入/删除操作速度都很快. <forward_list>:单向链表.只支持单向顺序访问.在链表任何位置进行插入/删除操作速度都很快. <array>:固定大小数组.支持快速随机访问.不能添加或删除元素.

第九章:顺序容器

一.顺序容器概述:一个容器就是一些特定类型对象的集合 1.顺序容器类型:vector.deque.list.forward_list.array.string string和vector将元素保存在连续的内存空间,所以用下标访问很快,但是在中间位置添加或删除元素很耗时 list和forward_list在任何位置添加和删除操作都很快,但是访问一个元素只能遍历它,而且额外的内存开销很大 forward_list设计的目的是与最好的手写的单向链表数据结构相当的性能 deque支持下标访问,且在两端添

C++标准库——顺序容器

容器是容纳特定类型对象的集合.顺序容器将单一类型元素聚集起来,并且根据位置来存储和访问这些元素.顺序容器中元素排列顺序与元素值无关,而是根据元素值添加到容器中的次序决定的. 标准库中有三种顺序容器,分别是vector,list与deque.其中vector支持随机的快速访问,因为vector中存放数据是在内存中连续存放的.在实际的实现中,vector会提前申请一块较大的内存空间(如果指定了大小,一般是指定大小的两倍),这样每次加入新的元素时不用再申请新的内存空间,提高效率.list容器是类似于链

c++11 顺序容器概括(1)

第一篇博文,希望不是最后一篇.o(∩_∩)o 哈哈 接下来几篇博文会由浅到深地介绍 STL 超好用的顺序容器. 容器:  就是一些特定类型对象的集合. 顺序容器:  定义:顺序容器是容器的一类.该类容器中,对象(元素)在 容器中的位置 与加入容器的顺序相对应,不依赖元素的值.         注意:顺序容器几乎可以保存任意类型的元素,但可能限制元素容器操作.详情请看下篇博文. 所有顺序容器公共的 特点 :  所以顺序容器都提供了快速顺序访问元素的能力. 顺序容器的类型 vector(常用) 1.