gpt4 book ai didi

c++ - 我可以创建一个 unique_ptr(n), n 在运行时声明的数组,而不循环元素吗?

转载 作者:太空狗 更新时间:2023-10-29 21:33:31 28 4
gpt4 key购买 nike

我想填充一个看起来像这样的结构:

unique_ptr<int[]> myArray[10];

每个 unique_ptr 都是一个大小为 n 的数组,在运行时定义但保持不变。

有没有办法在 myArray 的声明中初始化所有内容?或者至少不必明确地遍历 myArray 中的每个 unique_ptr

因为目前我找到的最简单的解决方案是添加:

for(auto & it : myArray)
it.reset(new int[n]);

但感觉就像对 C++ 进行了所有这些很酷的改进,将有一种更简单的方法来初始化一个由 10 个常数大小的数组组成的数组 n

我试过类似的方法:

generate_n(std::begin(myArray), 10, []{ return std::unique_ptr<int[]>(new int[n]); });

但是我收到有关隐式捕获 n 的错误。不知道是什么意思。。。

最佳答案

您正在使用原始数组的智能指针指向原始数组,这不是 C++ 惯用的。恕我直言,std::array<std::vector<int>, 10> MyArray;以后会更容易使用。无论如何,错误消息很容易解释:您使用了 n lambda 函数中的变量而不捕获它。编译器只需要:

generate_n(std::begin(myArray), 10, [n]{ return std::unique_ptr<int[]>(new int[n]); });

其实正确的生成方式是unque_ptr正在通过make_unique ,所以上面的行应该重写为(感谢 BenVoigt 的注意):

generate_n(std::begin(myArray), 10, [n]{ return make_unique<int[]>(n); });

关于c++ - 我可以创建一个 unique_ptr<T[]>(n), n 在运行时声明的数组,而不循环元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com