繁体   English   中英

emplace_back 临时向量就地到向量的向量

[英]emplace_back a temporary vector in-place to a vector of vector

假设我们有一个int数组,现在我们要转换为vectorvector ,条件是所有小于或等于 5 的数字必须是新向量vv的子向量的第一个元素,以及长度每个子向量不应大于 3。//

int array[] = {9, 8, 6, 5, 4, 8, 9, 7, 6, 5};

它应该转换为

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

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

比如说,我发现 9、8、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();

现在 vv 是 { { 9, 8, 6 }, { 5 } }。 这是相当麻烦的。 我可以直接就地创建临时向量到 emplace_back 以达到相同的结果吗?

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

或等效地,

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

谢谢!

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

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

您可以使用列表初始化:

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

wandbox.org 上的现场示例

你可以做:

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_back的整点emplace是直接转发参数构造函数元素(同为emplace在其他容器的方法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM