是否可以构造一个具有初始大小的 std::vector 并就地构造它的元素?我存储的类型是不可复制的,所以这不起作用,因为初始值被构造为临时值并复制到元素:
#include <iostream>
#include <memory>
#include <vector>
struct A
{
A(int i = 0) : i_ (i) {};
int i_;
std::unique_ptr<int> p_; // not copyable
};
int main()
{
std::vector<A> v (10, 1); // error
}
这接近我想要达到的目标,也许还不错,但我想知道是否有更简洁的方法:
int main()
{
//std::vector<A> v (10, 1); // error
std::vector<A> v;
v.reserve (10);
for (int i = 0; i < 10; ++i) {
v.emplace_back (1);
}
}
我仅限于 c++11,但出于好奇,我也对 c++17 解决方案感兴趣。
最佳答案
你可以使用std::generate_n
:
auto generator = []() {
return A(1);
};
std::vector<A> v;
v.reserve(10);
std::generate_n(std::back_inserter(v), 10, generator);
关于c++ - std::vector 构造,具有元素的就地构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429047/