Algorithm Fill N Function - C++ Programming Tutorial
C++ Course / STL Algorithm / Algorithm Fill N Function

Algorithm Fill N Function

BLUF: Mastering Algorithm Fill N Function is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Algorithm Fill N Function

C++ is renowned for its efficiency. Learn how Algorithm Fill N Function enables low-level control and high-performance computing in the tutorial below.

C++ Algorithm fill_n

The C++ fill_n function is utilized to update a specific number of elements in a sequence starting from a designated element with a new value.

It signifies that in the fill_n function, we define the starting position, the quantity of elements to fill, and the specific value to use for filling.

Syntax

Example

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

Parameter

An output iterator pointing to the location of the initial element within the range where the value val will be assigned.

val : Value which is used to fill the range.

n : The number of elements to be filled can be of signed or unsigned integer type.

Return value

The initial implementation of filln returns a null value, while the revised version of filln provides an iterator pointing to the element succeeding the last element that was filled.

Complexity

The time complexity scales linearly with the size of n. It assigns a specific value to every individual element.

Data races

The initial n items within the range indicated by the first pointer are altered.

Exception safety

This function will raise an exception if there is an exception thrown during element assignments or iterator operations.

Please be aware that using incorrect parameters can lead to unpredictable behavior.

Example 1

Let's explore a basic example to illustrate how to utilize the fill_n function:

Example

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

using namespace std;

int main() {

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

Output:

Output

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

Example 2

Let's see another simple example:

Example

#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;
}

Output:

Output

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 )

Example 3

Let's see another simple example:

Example

#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; 
}

Output:

Output

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

Example 4

Let's see another simple example:

Example

#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;
}

Output:

Output

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

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience