现在的位置: 首页 > 综合 > 正文

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

2013年03月21日 ⁄ 综合 ⁄ 共 1502字 ⁄ 字号 评论关闭

 

顺序容器简介:

标准库定义了三种顺序容器类型: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()指向容器中最后一个元素的下一位。

 

 

【上篇】
【下篇】

抱歉!评论已关闭.