Это несколько связано с предыдущим вопросом, который я задал об использовании emplace_back
в векторе пар. emplace_back() vs push_back при вставке пары в стандартный::вектор
Теперь мой вопрос касается использования emplace_back
в векторе векторов.
Вот код, о котором я спрашиваю с комментариями
std::vector<std::vector<int>> matrix;
matrix.emplace_back({1,2,3}); //doesn't compile
matrix.emplace_back(1,2,3); //doesn't compile
matrix.push_back({1,2,3}); //works and does what is expected (insert a vector made of {1,2,3} into matrix);
matrix.emplace_back(std::vector<int>{1,2,3}); //works but
//defeats the purpose of using emplace_back since this makes a copy
//and is thus equivalent to push_back in this case?
matrix.emplace_back(3,2) //this compiles,
//but it seems to insert a vector of size 3 made of 2s into the matrix.
//not actually sure why it does this
Итак, исходя из этого, matrix.emplace_back(std::vector<int>{1,2,3});
кажется единственным правильным способом использования std::vector<T>::emplace_back
в векторе векторов, но это, похоже, не дает никаких преимуществ по сравнению с push_back
. Верно ли мое понимание этого вопроса?
Кроме того, может ли кто-нибудь объяснить, почему matrix.emplace_back(3,2)
вставляет в матрицу вектор размера 3, состоящий из 2?
matrix.emplace_back(3,2)
использует конструкторvector(std::size_t size, const T& value)
. - person Jarod42   schedule 06.06.2019