STL杂记
Vector<int> v1(10);
Vector<int> v2;
Vector<int>:: iterator iter = v2.begin() ;
copy(v1.begin(), v1.end(), iter);
//将v.begin(), v.end()之间的数据传给迭代器iter开头的容器 copy(v.begin(), v.end(),ostream_iterator<int>(cout, ""t")); //这回是给ostream_iterator<int>(cout, ""t")了,cout表示标准输出,也就是说把v.begin(), v.end()之间的数据传给cout这个迭代器!!"t表示每输出一个就tab一下。 定义输出流迭代器,STL提供了模板类ostream_iterator。这个类的构造函数有两个参数:一个ostream对象和一个string值。因此可以象下面一样简单地创建一个迭代器对象:ostream_iterator<int>(cout, ""n")该迭代起可以和任何接受一个输出迭代器的函数一起使用。
list<int> dList;
int iArray[5] = { 1, 2, 3, 4, 5 };
copy(iArray, iArray + 5, front_inserter(dList));
通过使用front_inserter迭代器对象,可以只用单个copy()语句就完成将iArray矢量中的对象插入到dList链表前端的操作.。注意依次插入最前端,插入之后dList为 5,4,3,2,1
copy(iArray, iArray + 2, inserter(dList, 3));
将1,2插入到 dlist链表的第二个元素后面,先在5,4,3,2,1第3个元素前面插入1, 变为 5,4,1,3,2,1 然后在它的第三个元素前面插入2 为
5,4,2,1,3,2,1
advance(p, 2); //向前移动迭代器 等于 p=p+2
distance(p, iList.end(), k); //返回p到最后的距离,保存在k里
传递回调函数的例子
void initialize(long &ri);
vector<long> v(10);
for_each(v.begin(), v.end(), initialize);
//for_each遍历v,分别把v每个值用initialize初始化
vector<long>::iterator p;
p = find_if(v.begin(), v.end(), isMinus);
bool isMinus(const long &ri)
{
return (ri < 0);
}
//判断v中小于0的值。并返回他的迭代器
long sum = accumulate(v.begin(), v.end(), 0);
//v的所有元素求和
long product =accumulate(v.begin(), v.end(), 1, multiplies<long>());
//所以元素求集,我们来重点关注一下这句,看看accumulate源代码:
template<class _II, class _Ty, class _Bop> inline
_Ty accumulate(_II _F, _II _L, _Ty _V, _Bop _B)
{
for (; _F != _L; ++_F)
_V = _B(_V, *_F);
return (_V);
}
// _F =v.begin() _B= multiplies<long>() 注意这个_B(_V, *_F);自动调用了
Multiplies的类成员函数
_Ty operator()(const _Ty& _X, const _Ty& _Y) const
{return (_X * _Y);}