C++|stl算法操作普通数组及输出迭代器

我们知道,string是STL容器,其元素为字符。普通数组不是类,所以不存在成员函数一说,但是普通数组可以提供指针,在STL中,指针可视为迭代器,STL中的算法因为迭代器而独立于容器,由此,STL算法可以实现对普通数组的操作:

<code> 
 
 

int

main

()

{

int

col[]={

1

,

5

,

7

,

2

,

8

};

std

::sort(col,col+

5

);

std

::copy(col,col+

5

,

std

::ostream_iterator<

int

>(

std

::

cout

,

","

));

return

0

; } /<code>

sort()函数原型:

<code>

template

<

class

RandomAccessIterator

,

class

Compare

>

void

sort

(

RandomAccessIterator

first

,

RandomAccessIterator

last

,

Compare

comp

);/<code>

将范围内的元素 [first,last) 按comp确定的顺序(缺省值为

copy()函数原型:

<code>

template

<

class

InputIterator

,

class

OutputIterator

>

OutputIterator

copy

(

InputIterator

first

,

InputIterator

last

,

OutputIterator

result

);/<code>

将范围 [first,last)中的元素复制到从result开始的范围中。

<code>

int

myints[]={

10

,

20

,

30

,

40

,

50

,

60

,

70

};

std

::

vector

<

int

> myvector (

7

);

std

::copy ( myints, myints+

7

, myvector.begin() );/<code>

函数返回一个迭代器到目标范围的末尾(指向复制的最后一个元素后面的元素)。

<code>template <

class

T

,

class

charT

=

char

,

class

traits

=char_traits >

class

ostream_iterator

;/<code>

输入流和输出流都不支持迭代器,而STL算法都是通过操作迭代器来实现的,如果需要用STL算法处理流中输出的数据时,就用std::ostream_iterator,这就是一个适配器,它提供输出迭代器的接口,使用ostream来实现。ostream迭代器是按顺序写入输出流(如cout)的输出迭代器。

输出迭代器由一个基本的ostream对象构造,并与之关联,因此每当ostream迭代器上使用赋值运算符(=)时(不管是否取消引用),它都会在流中插入一个新元素。

也可以在构造时指定分隔符。此分隔符在插入每个元素后写入流。

<code>

std

::

vector

<

int

> myvector;

for

(

int

i=

1

; i<

10

; ++i) myvector.push_back(i*

10

);

std

::ostream_iterator<

int

> out_it (

std

::

cout

,

", "

);

std

::copy ( myvector.begin(), myvector.end(), out_it ); /<code>

迭代器适配器包括:

1 三种reverse(逆向)适配器,如rbegin(),rend()等。

2 insert迭代器,带有一个容器参数,有back_inserter(容器)、front_inserter(容器)、inserter(容器,位置)等。

3 stream适配器:如ostream_iterator,istream_iterator。

-End-


分享到:


相關文章: