emplace_back临时向量到向量

时间:2017-12-28 18:15:28

标签: c++ vector

假设我们有一个int数组,现在我们要转换为vector vector,条件是所有小于或等于5的数字必须是vv的第一个元素新向量int array[] = {9, 8, 6, 5, 4, 8, 9, 7, 6, 5}; 的子向量,以及每个子向量的长度不应大于3. //

vv = { { 9, 8, 6 }, { 5 }, { 4, 8, 9 }, { 7, 6 }, { 5 } };

,它应该转换为

vector< vector < int > > vv;
vector < int >  v
v.push_back(9);  
v.push_back(8);  
v.push_back(6);  
vv.push_back(v);
v.clear();
v.push_back(5);
vv.push_back(v)
v.clear();

为了做到这一点,我可以遍历数组并找到下一个子向量的元素到emplace_back。所以我在考虑找到要推回的数字之后,就地创建临时向量。

说,我发现9,8,6进入下一个子向量,5进入下一个,我们做:

vv.emplace_back( vector <int > ( 3, 9, 8, 6 ) ); // this is wrong
vv.emplace_back( vector< int > ( 1, 5 ) );       // this is good.

现在vv是{{9,8,6},{5}}。这非常麻烦。我是否可以直接为emplace_back创建临时向量以实现相同的结果。

vv.emplace_back( vector <int > { 9, 8, 6 } ); // this is good.
vv.emplace_back( vector< int > ( 1, 5 ) );    // this is good too.

或等效,

tf.greater

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您事先知道这些值,则可以进行列表初始化:

std::vector<std::vector<int>> vv{
  { 9, 8, 6 }, { 5 }
};

答案 1 :(得分:0)

您可以使用列表初始化:

vector<vector<int>> vv{{9,8,6}, {5}};

live example on wandbox.org

答案 2 :(得分:0)

你可以这样做:

vector< vector < int > > vv;
...
vv = { { 9, 8, 6 }, { 5 } };

或:

vector< vector < int > > vv;
...
vv.emplace_back( { 9, 8, 6 } );
vv.emplace_back( { 5 } );

你不应该在调用emplace_back方法时明确地创建临时文件,基本上它等同于push_backemplace的整点是直接将参数转发给元素ctor({{{ 1}}其他容器中的方法。)