STLalgorithm算法generate和generate_n(22)
今后的stl算法部分就不贴cpluplus的原文了,简要的介绍为主。
generate原型:
std::generate
template <class ForwardIterator, class Generator>
void generate (ForwardIterator first, ForwardIterator last, Generator gen);
该函数是使用gen函数产生的值填充范围内元素的值。
其行为类似如下:
1 | 1 |
1 | template <class ForwardIterator, class Generator> |
参数gen是一个接受空参数,并返回一个对应的值的函数或者是函数对象之类的。
一个简单的例子:
#include
#include
#include
using namespace std;
static int i=0;
int addone(){
return i++;
}
void generate1(){
vector
cout<<”at first,vi=”;
for_each(vi.begin(),vi.end(),[](int i){cout<<i<<” “;});
cout<<endl;
generate(vi.begin(),vi.end(),addone);
cout<<”after generate(vi.begin(),vi.end(),addone);\n vi=”;
for_each(vi.begin(),vi.end(),[](int i){cout<<i<<” “;});
cout<<endl;
}
运行截图:
可以看到,使用generate之后,vector里面的值被填充了!
generate_n原型:
std::generate_n
- C++98
- C++11
template <class OutputIterator, class Size, class Generator>
OutputIterator generate_n (OutputIterator first, Size n, Generator gen);
该函数是使用gen的返回值填充指定位置及之后的n个元素的函数。
其行为类似:
1 | 1 |
1 | template <class OutputIterator, class Size, class Generator> |
一个简单的例子:
#include
#include
#include
using namespace std;
void generaten(){
vector
cout<<”at first,vi=”;
for_each(vi.begin(),vi.end(),[](int i){cout<<i<<” “;});
cout<<endl;
int i=0;
generate_n(vi.begin(),7,[&i](){return i++;});
cout<<”after generate(vi.begin(),7,[&i](){return i++;});\n vi=”;
for_each(vi.begin(),vi.end(),[](int i){cout<<i<<” “;});
cout<<endl;
}
运行截图:
可以看到,只填充了7个元素!
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-13
于GDUT
——————————————————————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/stlalgorithm算法generate和generate-n(22)/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!