當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ Algorithm fill_n()用法及代碼示例


C++ 算法 fill_n() 函數用於為從特定元素開始的範圍內指定數量的元素分配新值。

這意味著在 fill_n() 中,我們指定開始位置、要填充的元素數和要填充的值。

用法

template <class OutputIterator, class Size, class T>
  void fill_n (OutputIterator first, Size n, const T& val);		//until C++ 11

template <class OutputIterator, class Size, class T>
  OutputIterator fill_n (OutputIterator first, Size n, const T& val);   	//since C++ 11

參數

first: 一個輸出迭代器,指向要分配值 val 的範圍中第一個元素的位置。

val:Value 用於填充範圍。

n:填充它的元素數量可以是有符號或無符號整數類型。

返回值

fill_n() 的第一個版本返回 none,fill_n() 的第二個版本返回一個迭代器,該迭代器指向要填充的最後一個元素之後的元素。

複雜度

複雜度在 n 中是線性的。並為每個元素分配一個值。

數據競爭

first 指向的範圍內的前 n 個對象被修改。

異常安全

如果元素賦值或迭代器上的操作引發異常,則此函數將引發異常。

請注意,無效參數會導致未定義的行為。

例子1

讓我們看一個簡單的例子來演示 fill_n() 的使用:

#include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

int main() {

  fill_n(ostream_iterator<int>(cout, ","), 10, 3);
  return 0;
}

輸出:

3,3,3,3,3,3,3,3,3,3,

例子2

讓我們看另一個簡單的例子:

#include <vector>  
#include <algorithm>  
#include <iostream>  
  
int main()   
{  
    using namespace std;  
    vector <int> v;  
  
    for ( auto i = 0 ; i < 9 ; ++i )  
        v.push_back( 0 );  
  
    cout << "  vector v = ( " ;  
    for ( const auto &w:v )  
        cout << w << " ";  
    cout << ")" << endl;  
  
    // Fill the first 3 positions with a value of 1, saving position.  
    auto pos = fill_n( v.begin(), 3, 1 );  
  
    cout << "modified v = ( " ;  
    for ( const auto &w:v )  
        cout << w << " ";  
    cout << ")" << endl;  
  
    // Fill the next 3 positions with a value of 2, using last position.  
    fill_n( pos, 3, 2 );  
  
    cout << "modified v = ( " ;  
    for ( const auto &w:v )  
        cout << w << " ";  
    cout << ")" << endl;  
  
    // Fill the last 3 positions with a value of 3, using relative math.  
    fill_n( v.end()-3, 3, 3 );  
  
    cout << "modified v = ( " ;  
    for ( const auto &w:v )  
        cout << w << " ";  
    cout << ")" << endl;  
    
    return 0;
}

輸出:

  vector v =  ( 0 0 0 0 0 0 0 0 0 )
modified v = ( 1 1 1 0 0 0 0 0 0 )
modified v = ( 1 1 1 2 2 2 0 0 0 )
modified v = ( 1 1 1 2 2 2 3 3 3 )

例子3

讓我們看另一個簡單的例子:

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std; 
  
int main() 
{ 
    vector<int> vect(8);   
  
    // calling fill to initialize first four values 
    // to 7 
    fill_n(vect.begin(), 3, 1); 
  
    for (int i=0; i<vect.size(); i++) 
        cout << ' ' << vect[i]; 
    cout << '\n'; 
  
    // calling fill to initialize 3 elements from  
    // "begin()+3" with value 4 
    fill_n(vect.begin() + 3, 3, 4); 
  
    for (int i=0; i<vect.size(); i++) 
        cout << ' ' << vect[i]; 
    cout << '\n'; 
  
    return 0; 
}

輸出:

 1 1 1 0 0 0 0 0
 1 1 1 4 4 4 0 0

示例 4

讓我們看另一個簡單的例子:

#include <vector>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main()
{
  vector <int> vec;
  vector <int>::iterator Iter1;
  int i;
  for (i = 10; i <= 20; i++)
    vec.push_back(i);
  cout <<"Vector vec data:";
  for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
    cout <<*Iter1<<" ";
  cout <<endl;
  // fill the last 3 positions for 6 position with a value of 9
  cout <<"\nOperation:fill_n(vec.begin() + 3, 6, 9)\n";
  fill_n(vec.begin() + 3, 6, 9);
  cout <<"Modified vec data:";
  for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
    cout <<*Iter1<<" ";
   cout <<endl;
 
  return 0;
}

輸出:

Vector vec data:10 11 12 13 14 15 16 17 18 19 20 

Operation:fill_n(vec.begin() + 3, 6, 9)
Modified vec data:10 11 12 9 9 9 9 9 9 19 20





相關用法


注:本文由純淨天空篩選整理自 C++ Algorithm fill_n()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。