函数模板
<algorithm>

std::fill_n

template <class OutputIterator, class Size, class T>  void fill_n (OutputIterator first, Size n, const T& val);
template <class OutputIterator, class Size, class T>  OutputIterator fill_n (OutputIterator first, Size n, const T& val);
用值填充序列
val 赋值给由 first 指向的序列的前 n 个元素。

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
template <class OutputIterator, class Size, class T>
  OutputIterator fill_n (OutputIterator first, Size n, const T& val)
{
  while (n>0) {
    *first = val;
    ++first; --n;
  }
  return first;     // since C++11
}

参数

first
输出迭代器 指向一个至少包含 n 个元素且支持赋值 T 类型的值的序列的起始位置。
n
要填充的元素数量。
此值不得为负。
如果为负,则函数不执行任何操作。
Size 必须是(可转换为)整数类型。
val
用于填充范围的值。

返回值


指向已填充的最后一个元素的下一个元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// fill_n example
#include <iostream>     // std::cout
#include <algorithm>    // std::fill_n
#include <vector>       // std::vector

int main () {
  std::vector<int> myvector (8,10);        // myvector: 10 10 10 10 10 10 10 10

  std::fill_n (myvector.begin(),4,20);     // myvector: 20 20 20 20 10 10 10 10
  std::fill_n (myvector.begin()+3,3,33);   // myvector: 20 20 20 33 33 33 10 10

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出
myvector contains: 20 20 20 33 33 33 10 10


复杂度

线性复杂度 O(n):为每个元素赋值。

数据竞争

first 指向的范围中的前 n 个对象被修改(每个对象被修改恰好一次)。

异常

如果元素赋值或迭代器操作抛出异常,则此函数也抛出异常。
请注意,无效参数会导致未定义行为

另见