Emplacement of a vector with initializer list

c++, emplace

Solution

Template deduction cannot guess that your brace-enclosed initialization list should be a vector. You need to be explicit:

vec.emplace_back(std::vector<double>{0.,0.});

Note that this constructs a vector, and then moves it into the new element using `std::vector`'s move copy constructor. So in this particular case it has no advantage over `push_back()`. @TimKuipers 's answer shows a way to get around this issue.

Problem

i have a `std::vector<std::vector<double>>` and would like to add some elements at the end of it so this was my trial: ``` std::vector<std::vector<double> > vec; vec.emplace_back({0,0}); ``` but this does not compile whereas the following will do: ``` std::vector<double> vector({0,0}); ``` Why can't emplace_back construct the element at this position? Or what am i doing wrong? Thanks for your help.

Original source