Cpp Primer<<学习容器与算法--顺序容器_8

本文探讨了C++中的顺序容器,这些容器按照元素插入的次序存储和访问元素,与元素值无关。顺序容器包括vector、deque和list等,它们为开发者提供了灵活的数据结构选择。
摘要由CSDN通过智能技术生成
容器与算法

顺序容器:
将单一类型元素聚集起来成为容器,根据位置存储和访问这些元素。容器中元素排列次序与元素值无关,而是与添加到容器的次序决定的。

三种顺序容器类型:vector、list、deque(double-ended queue,简称”deck”)
三种顺序容器适配器:stack、queue、priority_queue

顺序容器类型
顺序容器
vector支持快速随机访问
list支持快速插入/删除
deque双端队列
顺序容器适配器
stack后进先出(FILO) 栈
queue先进先出(FIFO) 队列
priority_queue有优先级管理的队列

1.顺序容器定义
头文件:

#include <vector>
#include <list>
#include <deque>

所有容器都是类模板。
定义容器类型,容器名后面必须加一对包含容器中存放元素类型的尖括号

vector<string> svec;     // empty vector that can hold strings
list<int> ilist;            //  empty list that can hold ints
deque<Sales_item> items;  //  empty deque that holds Sales_items

以上容器类型都定义了不带形参的默认构造函数,用于创建之类型的空容器对象;
需去掉T前面的单引号

容器构造函数
C<’T> c;创建名为c的空容器,适用于所有容器
C<’T> c1(c)创建容器c的副本,c1和c必须具有相同的容器类型,适用与所有容器
C<’T> c2(b,e)创建c,其元素为迭代器b,e范围之间的元素的副本,适用于所有容器
C <’T> c3(n,t)用n个值为t的元素创建容器c3,仅适用于顺序容器
C<’T> c4(n)创建n个调用含有默认构造函数初始化元素的容器,仅适用与顺序容器

1.1将一个容器初始化为另一个容器的副本

vector<int> ivec;
vector<int> ivec2<ivec>    //  ok:ivec is vector<int>
list<int> ilist(ivec)      //  error:ivec is not list <int>
vector<double> dvec(ivec); //  error:ivec holds int not double
1.2初始化为一段元素的副本

通过传递一个容器的一对迭代器到另一个容器,实现容器元素的存储,但不要求容器类型相同,目标容器内元素类型也可以不相同,相互兼容即可,既可以互相转换就行。

//  initialize slist with copy of each element of svec
list<string> slist(svec.begin(),svec.end());
//  find midpoint int vector 
vector<string>::iterator mid = svec.begin() + svec.size()/2;
//  initialize front with first half of svec:The elements up to but not including *mid
deque<string> front(svec.begin(),mid);
//  initialize back with second half of svec:The elements *mid through end of svec
deque<string> back(mid,svec.end());

指针就是迭代器

char words[] = {“stately”,”plump”,”buck”,”mulligan”};
//  calculate how many elements in words
size_t words_size = sizeof(words)/sizeof(char *);
//  use entire array to initialize words2
list<string> words2(words,words+words_size);

1.3分配和初始化指定数目的元素

const list<int>::size_type list_size = 64;
list<string> slist(list_size,”eh?”);   // 64 strings,each is eh?

创建容器时,可以仅仅指定容器的大小:

list<int> ilist(list_size);  //64 elements,each initialize to 0
//  svec has as many elenments as the return value from get_word_count
extern unsigned get_word_count(const string &file_name);
vector<string> svec(get_word_count(“Chimera”));

采用这种类型初始化,元素类型必须是内置或复合类型,或者是提供了默认构造函数的类类型。无默认构造函数,必须显示指定其元素初始化式。

接受容器大小做形参的构造函数只适用与顺序容器,而关联容器不支持这种初始化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值