Dan*_*nra 6 c++ arrays unique-ptr c++11 c++14
是否可以用来std:fill填充unique_ptrs 数组?目的是为不同的对象提供不同的指针,这些对象用相同的参数初始化.
例如:
std::unique_ptr<int> ar[3];
std::fill(ar.begin(), ar.end(), make_unique_for_each_element_somehow<int>(1));
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 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); }
);
Run Code Online (Sandbox Code Playgroud)
我没有尝试过,也不知道你是否需要摆弄它以避免因不可复制而产生的问题.希望移动语义就足够了.
(当然,在C++ 11中,您将需要自己的make_unique功能.)
顺便说一句,你.begin()和.end()是错误的(数组没有成员函数),所以(得益于songyuanyao提醒)我已经改正了这些.
我不认为你可以做到这一点,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)); });
Run Code Online (Sandbox Code Playgroud)