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);}

原文地址:https://www.cnblogs.com/SuperXJ/p/1575255.html