【发布时间】:2015-11-17 11:16:29
【问题描述】:
我有一个std::array<Foo, 10>,我想使用从Foo 到Bar 的函数创建一个std::array<Bar, 10>。通常我会像这样使用std::transform:
array<Bar, 10> bars;
transform(foos.begin(), foos.end(), bars.begin(), [](Foo foo){
return Bar(foo.m_1, foo.m_2);
});
但是,Bar 没有默认构造函数,因此我无法创建 bars 数组。我总是可以使用vector,但如果能够使用array 来保证我总是有10 个元素,那就太好了。这可能吗?
【问题讨论】:
-
您可以使用 not-quite-yet-std std::optional 之类的东西来包装 Bar 以用于此数组。至少这不会强制 Bar 通常具有默认构造函数,并且无论如何它都是一个有用的包含在项目中(imo)。
-
在您的代码中
vector.reserve(10)是否不足以满足10的大小,或者您是否要确保客户端代码也不会更改该大小? -
在这种情况下,
vector.reserve可以正常工作,但这并不重要,因为从语义上讲,这个集合必须有 10 个项目,而且并非在所有情况下都有效。如果我必须将其传递给接受std::array<Bar, 10>&的函数,则图像。
标签: c++ c++11 vector std stdarray