fill() and fill_n() functions in C++ STL
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
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(ForwardIterator first, ForwardIterator last, const value_type &val); |
Its syntax is -: In C++ 98: void fill_n (OutputIterator first, Size n, const T& val); From C++11 onwards: OutputIterator fill_n (OutputIterator first, Size n, const T& val); |
3. | It has no return value. |
(In C++ 11)It returns an iterator pointing to the element that follows the last element to be filled. (In C++ 98) returns none. |
4. | Its time complexity is O(N) | Its time complexity is O(N) |
Contact Us