Skip to content
Related Articles

Related Articles

fill() and fill_n() functions in C++ STL

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Basic
  • Last Updated : 03 Jun, 2022

A vector, once declared, has all its values initialized to zero. Following is an example code to demonstrate the same. 

CPP




// C++ program for displaying the default initialization
// of the vector vect[]
#include<bits/stdc++.h>
using namespace std;
 
int main()
{
    // Creating a vector of size 8
    vector<int> vect(8); 
 
    // Printing default values
    for (int i=0; i<vect.size(); i++)
       cout << ' ' << vect[i];
}

Output :

0 0 0 0 0 0 0 0

  What if we wish to initialize the vector to a specific value, say 1 ? For this, we can pass the value along with the size of the vector. 

CPP




// C++ program for displaying specified initialization
// of the vector vect[]
#include<bits/stdc++.h>
using namespace std;
 
int main ()
{
    // Creates a vector of size 8 with all initial
    // values as 1.
    vector<int> vect(8, 1); 
 
    for (int i=0; i<vect.size(); i++)
       cout << ' ' << vect[i];
}

Output :

1 1 1 1 1 1 1 1

  What if we wish to initialize the first 4 values to say 100 and rest 6 values as 200 ? One way to do this is to manually provide a value to each position in the vector. The other methods as provided in STL, the Standard Template Library, are fill and fill_n.  

  • fill() The ‘fill’ function assigns the value ‘val’ to all the elements in the range [begin, end), where ‘begin’ is the initial position and ‘end’ is the last position. NOTE : Notice carefully that ‘begin’ is included in the range but ‘end’ is NOT included. Below is an example to demonstrate ‘fill’ : 

CPP




// C++ program to demonstrate working of fill()
#include <bits/stdc++.h>
using namespace std;
 
int main ()
{
  vector<int> vect(8);
 
  // calling fill to initialize values in the
  // range to 4
  fill(vect.begin() + 2, vect.end() - 1, 4);
 
  for (int i=0; i<vect.size(); i++)
    cout << vect[i] << " ";
 
  return 0;
}

  • Output : 
0 0 4 4 4 4 4 0
  • fill_n() In fill_n(), we specify beginning position, number of elements to be filled and values to be filled. The following code demonstrates the use of fill_n. 

CPP




// C++ program to demonstrate working of fil_n()
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    vector<int> vect(8); 
 
    // calling fill to initialize first four values
    // to 7
    fill_n(vect.begin(), 4, 7);
 
    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 :
 7 7 7 7 0 0 0 0
 7 7 7 4 4 4 0 0

  Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Let us see the difference table in a tabular form -:

 fill() fill_n()
1.It sets given value to all elements of array.It is used to assign a new value to a specified number of elements in a range beginning with a particular element.
2.

Its syntax is -:

void fill(const value_type &val);

Its syntax is -:

void fill_n (OutputIterator first, Size n, const T& val);

3.It has no return value.It returns an iterator pointing to the element that follows the last element to be filled.
4.Its time complexity is O(N)Its time complexity is O(N)


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!