When we pass an array to a function, a pointer is actually passed.
When a vector is passed to a function, a copy of the vector is created. For example, we can see below program, changes made inside the function are not reflected outside because function has a copy.
// C++ program to demonstrate that when vectors // are passed to functions without &, a copy is // created. #include<bits/stdc++.h> using namespace std; // The vect here is a copy of vect in main() void func(vector< int > vect) { vect.push_back(30); } int main() { vector< int > vect; vect.push_back(10); vect.push_back(20); func(vect); // vect remains unchanged after function // call for ( int i=0; i<vect.size(); i++) cout << vect[i] << " " ; return 0; } |
Output:
10 20
The above style of passing might also take a lot of time in cases of large vectors. So it is a good idea to pass by reference.
// C++ program to demonstrate how vectors // can be passed by reference. #include<bits/stdc++.h> using namespace std; // The vect is passed by reference and changes // made here reflect in main() void func(vector< int > &vect) { vect.push_back(30); } int main() { vector< int > vect; vect.push_back(10); vect.push_back(20); func(vect); for ( int i=0; i<vect.size(); i++) cout << vect[i] << " " ; return 0; } |
Output:
br>10 20 30
If we do not want a function to modify a vector, we can pass it as a const reference.
// C++ program to demonstrate how vectors // can be passed by reference with modifications // restricted. #include<bits/stdc++.h> using namespace std; // The vect is passed by constant reference // and cannot be changed by this function. void func( const vector< int > &vect) { // vect.push_back(30); // Uncommenting this line would // below error // "prog.cpp: In function 'void func(const std::vector<int>&)': // prog.cpp:9:18: error: passing 'const std::vector<int>' // as 'this' argument discards qualifiers [-fpermissive]" for ( int i=0; i<vect.size(); i++) cout << vect[i] << " " ; } int main() { vector< int > vect; vect.push_back(10); vect.push_back(20); func(vect); return 0; } |
Output:
10 20
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
leave a comment
0 Comments