C++ 通过唯一的ptr访问std::阵列
这只是为了学习,我知道我可以用向量,但我有C++ 通过唯一的ptr访问std::阵列,c++,c++14,C++,C++14,这只是为了学习,我知道我可以用向量,但我有 const int N = 1e3; auto my_arr = std::make_unique<std::array<int, N>>(); // To access it I have to do this - why [0][0] twice? my_arr.get()[0][0] = 1; // Getting the size for fun std::cout << sizeof(my_arr.ge
const int N = 1e3;
auto my_arr = std::make_unique<std::array<int, N>>();
// To access it I have to do this - why [0][0] twice?
my_arr.get()[0][0] = 1;
// Getting the size for fun
std::cout << sizeof(my_arr.get()) << "\n"; // outputs 8
std::cout << sizeof(my_arr.get()[0]) << "\n"; // outputs 800000000
std::cout << sizeof(my_arr.get()[0][0]) << "\n"; // outputs 8
const int N=1e3;
auto my_arr=std::make_unique();
//要访问它,我必须这样做-为什么要[0][0]两次?
my_arr.get()[0][0]=1;
//为了好玩而穿这个尺码
std::cout正如您自己所说的。get()
返回指向托管对象的指针
所以返回的是std::array*
而不是std::array
:
std::array*array_ptr=my_arr.get();
因此,您可以编写(*myu arr)[0]
或(*myu arr.get())[0]
,正如您自己所说的。get()
返回指向托管对象的指针
所以返回的是std::array*
而不是std::array
:
std::array*array_ptr=my_arr.get();
所以要么写(*myu arr)[0]
要么写(*myu arr.get())[0]
myu arr.get()
给你一个std::array*
。由于您有一个指针执行指针[0]
与*指针
相同。因此,您实际上不需要my_arr.get()[0][0]
,而可以使用
(*my_arr.get())[0]
以显示正在取消引用指针。事实上,你可以用
(*my_arr)[0]
因为操作符*
为std::unique\u ptr
重载,它将返回指向对象的引用。my\u arr.get()
为您提供一个std::array*
。由于您有一个指针执行指针[0]
与*指针
相同。因此,您实际上不需要my_arr.get()[0][0]
,而可以使用
(*my_arr.get())[0]
以显示正在取消引用指针。事实上,你可以用
(*my_arr)[0]
因为操作符*
对于std::unique\u ptr
是重载的,它将返回指向对象的引用。好吧,您不必这样做,但它是有效的
my_arr.get()
返回一个std::array*
与任何指针一样,您可以像数组一样对其进行索引
my_arr.get()[0]
返回对数组“数组”中第一个元素的引用
然后可以使用std::array
的索引操作符来获取元素
my_arr.get()[0][0]
返回对所需元素的引用
或者,你可以写:
my_arr->at(0)
my_arr->operator[](0)
(*my_arr)[0]
*my_arr->data()
好吧,你不必这么做,但它是有效的
my_arr.get()
返回一个std::array*
与任何指针一样,您可以像数组一样对其进行索引
my_arr.get()[0]
返回对数组“数组”中第一个元素的引用
然后可以使用std::array
的索引操作符来获取元素
my_arr.get()[0][0]
返回对所需元素的引用
或者,你可以写:
my_arr->at(0)
my_arr->operator[](0)
(*my_arr)[0]
*my_arr->data()
您可能不想这样做:
auto my_arr = std::make_unique<std::array<int, N>>();
这里的优点是:
N
可以是运行时值,而不必是常量表达式
- 存在并执行您想要的操作,因此
my\u arr[2]
会索引到数组中李>
您可能不想这样做:
auto my_arr = std::make_unique<std::array<int, N>>();
这里的优点是:
N
可以是运行时值,而不必是常量表达式
- 存在并执行您想要的操作,因此
my\u arr[2]
会索引到数组中李>
my\u arr.get()
返回指针。取消对指针的引用和在位置0对其进行索引是同一回事ptr[0]
定义为与*(ptr+0)相同我的arr.get()[0]
与*(我的arr.get())
相同。你应该使用后者,因为没有my_arr.get()[1]
。你真的确定const int N=1e3代码>?看起来有点奇怪。还要记住,std::unique_ptr
是指针的替代品,所以严格来说,你会得到一个指向从数组中衰减的指针的指针,并且你会得到或多或少的sizeof(int)
@n.m。实际上op应该使用*my_arr
,而不使用get@πάνταῥεῖ 它有什么奇怪的地方?my_arr.get()
返回一个指针。取消对指针的引用和在位置0对其进行索引是同一回事ptr[0]
定义为与*(ptr+0)相同我的arr.get()[0]
与*(我的arr.get())
相同。你应该使用后者,因为没有my_arr.get()[1]
。你真的确定const int N=1e3代码>?看起来有点奇怪。还要记住,std::unique_ptr
是指针的替代品,所以严格来说,你会得到一个指向从数组中衰减的指针的指针,并且你会得到或多或少的sizeof(int)
@n.m。实际上op应该使用*my_arr
,而不使用get@πάνταῥεῖ 有什么奇怪的地方吗?谢谢你提供了这些备选方案,他们非常有帮助。谢谢你提供了这些备选方案,他们非常有帮助