Can we create a temporary parameter pass-in `std :: vector <int>`?
void PrintNow(const std::vector<int> &v) { std::cout << v[0] << std::endl; } std::vector<int>().push_back(20); // this line generates no complains PrintNow(std::vector<int>().push_back(20)); // error
From VS2010 Sp1:
eror C2664: 'PrintNow': cannot convert parameter 1 from 'void' to 'const std :: vector <_Ty> &'
Q> Is it possible that we can pass a temporary vector for a function?
In C ++ 11, you can simply do:
void PrintNow(const std::vector<int> &v) { std::cout << v[0] << std::endl; } PrintNow({20});
VS2010 does not yet support this part of C ++ 11. (gcc 4.4 and clang 3.1 do)
If you need only one element, then in C ++ 03 you can do:
PrintNow(std::vector<int>(1,20));
If you need more than one element, I donβt think there is any single line solution. You can do it:
{ // introduce scope to limit array lifetime int arr[] = {20,1,2,3}; PrintNow(std::vector<int>(arr,arr+sizeof(arr)/sizeof(*arr)); }
Or you can write a varargs function that takes an int list and returns a vector. If you do not use it a lot, although I do not know what it is worth it.
The error occurs because the return type of the std::vector::push_back
function is void
:
void push_back ( const T& x );
Try the following:
PrintNow(std::vector<int>(1, 20));
The above code uses one of the available constructors of the std::vector
class:
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );