如何填充unique_ptr数组?
How to fill an array of unique_ptr?
是否可以使用std:fill
来填充unique_ptr
数组?目的是具有指向使用相同参数初始化的不同对象的不同指针。
例如:
std::unique_ptr<int> ar[3];
std::fill(ar.begin(), ar.end(), make_unique_for_each_element_somehow<int>(1));
不,但这就是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 中,您将需要自己的make_unique
函数。
顺便说一下,你的.begin()
和.end()
是错误的(数组没有成员函数),所以(感谢松元瑶的提醒)我已经纠正了这些。
我不认为你可以用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)); });
另一种解决方案:
std::unique_ptr<int> ar[3];
size_t i;
for (i = 0; i < elementsof(ar); ++i) {
ar[i].reset(new int);
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 如何删除带有 int ptr 指向它的数组
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 有没有办法在数组上遍历shared_或任何"smart" ptr?
- 从数组的共享ptr访问共享ptr
- 分配const char *ptr数组参数?c++
- 按字母顺序排列字符串数组(甚至是*ptr)
- 使用ptr-to-ptr数组
- c++类的析构函数包含ptr到对象的数组