代码改变世界

STL: fill,fill_n,generate,generate_n

  youxin  阅读(352)  评论(0编辑  收藏  举报

fill

Assigns the same new value to every element in a specified range.

template<class ForwardIterator, class Type>
   void fill(
      ForwardIterator _First, 
      ForwardIterator _Last, 
      const Type& _Val
   );

 

fill_n

Assigns a new value to a specified number of elements in a range beginning with a particular element.

template<class OutputIterator, class Size, class Type>
   void fill_n(
      OutputIterator _First, 
      Size _Count, 
      const Type& _Val
   ); 

注:_Count必须小于等于_Last-_First.

 

此外,对于char* 或者wchar_t*的数组,最好是使用memset或wmemset。

 

generate

Assigns the values generated by a function object to each element in a range.

template<class ForwardIterator, class Generator> 
   void generate( 
      ForwardIterator _First,  
      ForwardIterator _Last,  
      Generator _Gen 
   );

例如,用随机数值填充vector。

复制代码
复制代码
template<class T>
struct display
{
    void operator()(const T& val){
        cout<<val<<' ';
    }
};

int rand100(){
    return rand()%100;
}

int main()
{
    vector<int> vec(5);
    srand(time(0));
    generate(vec.begin(),vec.end(),rand100);
    cout<<"vector: ";
    for_each(vec.begin(),vec.end(),display<int>());
    cout<<endl;

    getchar();
}
复制代码
复制代码

generate_n

Assigns the values generated by a function object to a specified number of elements in a range and returns to the position one past the last assigned value.

template<class OutputIterator, class Diff, class Generator>
   void generate_n(
      OutputIterator _First, 
      Diff _Count, 
      Generator _Gen
   );

 

此外,<numeric>中的iota可以使用递增序列填充一个指定的区域。这个函数好像是新增的,不晓得是不是标准STL中的成员。

iota

Stores a starting value, beginning with the first element and filling with successive increments of that value (_Value++) in each of the elements in the interval [_First, _Last).

template<class ForwardIterator, class Type> 
   void iota( 
      ForwardIterator _First,  
      ForwardIterator _Last, 
      Type _Value  
   );


参考:http://www.cnblogs.com/freewater/archive/2013/03/07/2947614.html

http://blog.csdn.net/mashen1989/article/details/7693348

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2013-04-05 查看FileZila 快速连接密码
2013-04-05 转:网页设计中的默认字体样式详解
2012-04-05 setprecision()与setiosflags()
2012-04-05 c++ ios_base类
点击右上角即可分享
微信分享提示