繁体   English   中英

数组之间的区别<int, size>名称和整数名称[大小]</int,>

[英]Difference between array<int, size> name and int name[size]

我找到了两种创建数组的方法。 它们之间有什么区别?

  1. array<int, 5> arr = {5, 8, 1, 3, 6};
  2. int arr[5] = {5, 8, 1, 3, 6};

我还发现我可以在1中使用arr.size() ,但我必须在2中使用sizeof(arr)/sizeof(*arr)

TYPE NAME[SIZE]一直是声明数组的方式,C++ 继承自 C

OTOH std::array是 C++11 中的新功能。 这是一个将旧数组包装在里面的结构。 它有一个名为size()的成员来获取内部数组的元素数。 一个普通的数组没有任何方法,所以很明显你不能那样得到大小

当您可以使用 sizeof() 时,使用指针来查找长度是什么?

sizeof返回以字节为单位的大小,而不是元素的数量。 而且您不需要使用指针来获取长度。 sizeof(arr)/sizeof(arr[0])sizeof(arr)/sizeof(int)是两种常用的获取大小的方法,后者在更改数组类型时更容易出错

普通数组也会衰减为指针,因此您无法在函数中获取它的大小。 您必须事先使用sizeof获取大小并将大小显式传递给 function。 std::array具有有关大小的信息,因此在函数内部知道大小,但是您需要编写一个模板来处理不同的数组大小,这会导致相同 function 的多个实现,因为模板化类型的每个实例化都是不同的类型。 在这种情况下,传递数组的指针和大小是更好的解决方案

 array<int, 5> arr = {5, 8, 1, 3, 6}

这需要#include <array> 您正在创建一个接受模板 arguments int5的 object (属于 class array )。 通过使用此容器,您可以受益于内置的size()成员 function。

 int arr[5] = {5, 8, 1, 3, 6};

这是一个简单的 C 风格数组声明。 这不是来自任何 class 的 object,也不需要声明任何 header。 您需要使用户定义的size() function。 请注意,您正在尝试获取指向 integer 的指针的大小 – sizeof(arr) / sizeof(*arr)以字节为单位返回元素的大小。 您需要改用sizeof(arr) / sizeof(arr[0]) - 所以这会返回元素的总数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM