C++Primer学习笔记第九章(9/18)顺序容器-(上)

 

顺序容器简介:

标准库定义了三种顺序容器类型:vectorlist deque

标准库还提供了三种容器适配器(adaptors): stack, queue, priority_queue

 

 

顺序容器的定义:

#include <vector>        //第一种

vector<string> svec;     //第一种

#include <list>          //第二种

list<int> ilist;         //第二种

#include <deque>         //第三种

deque<Sales_item> items; //第三种

 

 

顺序容器的初始化:

C<T> c;

C c(c2);

C c(b,e);//创建 c,其元素是迭代器 b e 标示的范围内元素的副本。

C c(n,t);

C c(n);

关于③:

尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该实现该功能。使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制的元素转换为所构建的新容器的元素类型,即可实现复制。

e.g.1:

vector<string>::iterator mid = svec.begin() + svec.size()/2;

deque<string> front(svec.begin(), mid);

deque<string> back(mid, svec.end());

e.g.2:

因为指针就是迭代器,所以允许使用内置数组中的一对指针初始化容器:

char *words[] = {"stately", "plump", "buck", "mulligan"};

size_t words_size = sizeof(words)/sizeof(char *);

list<string> words2(words, words + words_size);

 

 

还可以定义元素类型为容器类型的容器:

vector< vector<string> > lines; // vector of vectors

 

 

迭代器范围(iterator range):

C++ 语言使用一对迭代器标记迭代器范围(iterator range),这两个迭代

器分别指向同一个容器中的两个元素或超出末端的下一位置,通常将它们命名为

first last,或 beg end,用于标记容器中的一段元素范围。

。该范围内的元素包括迭代器 first 指向的元素,以及从 first 开始

一直到迭代器 last 指向的位置之前的所有元素。如果两个迭代器相等,则迭代

器范围为空。

此类元素范围称为左闭合区间(left-inclusive interval),其标准表示

方式为:

 [ first, last )

 

 

区别end()back()

if (!ilist.empty())

{

list<int>::reference val = *ilist.begin();//returns an iterator to the element,

list<int>::reference val2 = ilist.front();this function returns a direct reference

list<int>::reference last = *--ilist.end();returns an iterator to the element,

list<int>::reference last2 = ilist.back(); // this function returns a direct reference

}

区别1end()返回一个迭代器,back()返回对元素的引用。

区别2end()指向容器中最后一个元素的下一位。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值