如何立即在向量中插入向量?

use*_*620 5 c++ stl vector

我有一个元素类型的向量vector<int>,我想快速插入这样的元素:

triangles.push_back(vector<int>(som1, som2, som3))
Run Code Online (Sandbox Code Playgroud)

但它不起作用,没有vector<int>匹配参数列表的构造函数.

有没有快速的方法来做,或者我必须创建一个临时vector<int>变量,推回som1 som 2和som3,最后推回三角形的临时变量?

dlf*_*dlf 1

如果您不能使用 C++11 初始值设定项列表,一切都不会丢失。鉴于您的vector名称为triangles,我将假设每个子向量将始终包含恰好三个ints。如果是这种情况,您可以使用辅助函数:

std::vector<int> MakeTriangle(int a, int b, int c)
{
   std::vector<int> triangle(3);
   triangle[0] = a;
   triangle[1] = b;
   triangle[2] = c;
   return triangle;
}

void f()
{
   std::vector<std::vector<int>> triangles;
   triangles.push_back(MakeTriangle(1, 2, 3));
}
Run Code Online (Sandbox Code Playgroud)

对于更一般的问题,您可以编写一组MakeVector()函数模板,采用不同数量的参数,最多达到某个合理的限制(同样,如果您没有 C++11)。

如果您的项目有提升,您也可以使用boost::assign. 但我不会只是为了解决这个问题而拖入整个 boost 库。