![](/img/trans.png)
[英]how to use std::vector::emplace_back for vector<vector<int> >?
[英]how to use emplace_back to insert a new element into a vector of vector?
我对一些 C++ 概念的语法感到困惑。
假设我有一个向量向量:
vector<vector<int>> data;
我可以使用push_back()
插入一个新元素:
data.push_back({1, 1});
这样,我列表初始化了一个新元素,然后将这个元素的副本推送到data
?
我也可以这样做:
vector<int> tmp{1, 1};
data.emplace_back(tmp);
但是如果我直接调用emplace()
,就像这样:
data.emplace_back(1, 1);
它没有给我预期的结果。
我在这里误解了什么吗?
---更新:对不起,我的意思是emplace_back
。 我的问题是如何直接使用emplace_back
进行初始化,而不是先初始化一个 tmp 向量vector<int> tmp{1, 1};
.
我可以使用 push_back 插入一个新元素: data.push_back({1, 1}); 这样,我在list中初始化了一个新元素,然后把这个元素的副本推送到数据中?
确切地。
data.emplace(1, 1);
vector<Type>::emplace_back
将其 arguments 转发给Type
的构造函数。 现在, std::vector<int>
有一个构造函数,它接受两个 integer arguments。 一个指定长度 (1) 和填充元素 (1)。
但是,您可以告知编译器您实际上是指列表初始化!
#include "fmt/format.h"
#include "fmt/ranges.h"
#include <initializer_list>
#include <vector>
int main() {
std::vector<std::vector<int>> a;
a.emplace_back(std::initializer_list<int>{1, 1});
a.emplace_back(std::initializer_list<int>{2, 2});
fmt::print("{}\n", fmt::join(a.begin(), a.end(), ";"));
}
产生预期的
{1, 1};{2, 2}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.