我们知道,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-