函式模板
<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 個物件被修改(每個物件被修改恰好一次)。

異常

如果元素賦值或迭代器操作丟擲異常,則此函式也丟擲異常。
請注意,無效引數會導致未定義行為

另見