是否可以使用pdf
填充std:fill
的数组?目的是为不同的对象提供不同的指针,这些对象使用相同的参数进行初始化。
例如:
unique_ptr
答案 0 :(得分:20)
不,但这是std::generate
的用途。
不是给出在整个目标范围内复制的单个值,而是std::generate
被赋予"生成器"根据需要创建每个值的函数。
所以,可能是这样的:
std::unique_ptr<int> ar[3];
std::generate(
std::begin(ar),
std::end(ar),
[]() { return std::make_unique<int>(1); }
);
我还没有尝试过,并且根本不知道你是否需要摆弄它以避免因不可复制而产生的问题。希望移动语义就足够了。
(当然,在C ++ 11中,您需要your own make_unique
function。)
顺便说一下,你的.begin()
和.end()
错了(数组没有成员函数),所以(感谢来自songyuanyao的提醒)我已经纠正了这些。
答案 1 :(得分:8)
我认为你不能用std::fill()
来做,但与std::generate()
一起做是微不足道的:
std::unique_ptr<int> array[10];
std::generate(std::begin(array), std::end(array),
[]{ return std::unique_ptr<int>(new int(17)); });
答案 2 :(得分:0)
另一种解决方案:
std::unique_ptr<int> ar[3];
size_t i;
for (i = 0; i < elementsof(ar); ++i) {
ar[i].reset(new int);
}