Vector initializer list passed as a function parameter

13,233

Declaration std::vector<int> { 1} creates 1 element with value as 1. Element created will have value 1 at 0th position.

Declaration std::vector<int> (1,6) creates 1 element with value as 6. Element created will have value 6 at 0th position.

The declaration provided in question work fine.

#include <iostream>
#include <vector>


void foo(std::vector<int> vec)
{
    std::cout<<"size of vec "<<vec.size()<<std::endl;

    for(int x =0; x < vec.size(); ++x)
    {
        std::cout<<vec[x]<<std::endl;
    }
    std::cout<<std::endl;
}

int main()
{
    foo(std::vector<int> { 1});
    foo(std::vector<int> { 4});
    foo(std::vector<int> { 5});
    foo(std::vector<int> (1,6));

   return 0;
}
Share:
13,233
user3277261
Author by

user3277261

Updated on June 14, 2022

Comments

  • user3277261
    user3277261 almost 2 years

    I have a function that receives an std::vector<int> as such:

    void foo(std::vector<int>);
    

    And I would like to repeatedly call foo() with small vectors generated on the fly. I was trying to create a new vector on the fly using an initializer list but it seems to allocate a vector of size n, instead of initializing it.

    For example:

    foo(std::vector<int> { 1});
    foo(std::vector<int> { 4});
    foo(std::vector<int> { 5});
    

    It seems to create 3 vectors, allocated for 1, 4 and 5 default (0) elements respectively.

    Instead I would like to create 3 vectors of size 1, but with value 1, 4 and 5. I am aware I could use the constructor (n, value) like vector<int> (1,1), (1,4) and (1,5), but for my understanding I would like to understand why my initializer list is not doing what I expect it to.