我们可以在运行时检查动态数组的大小

时间:2014-07-25 17:19:47

标签: c++ arrays

我创建了一个大小为int arr[50];的数组,但我会在编译期间插入值,就像我的解决方案在执行某些功能后会在其中插入10个值(可能会有不同数量的值),现在是第二个我的程序的一部分我必须循环遍历数组,如it should iterate <= total values of array,如int arr[50]我的程序保存10值,它应该只迭代10次,但我怎么能得到该数组中只有10个值。

arr[50]=sum;
for (int ut=0; ut<=arr[100].length();ut++)

虽然我知道ut<=arr[100].length()是错误的,但只是假设,如果我以这种方式解决条件,该功能将起作用。

编辑:

我知道我们可以使用vector,但我只是在使用数组来查找那种类型的东西。

感谢您的回复

1 个答案:

答案 0 :(得分:2)

首先,您显示的数组不是&#34;动态数组&#34;。它是在堆栈上创建的;它是一个自动变量。

对于您的特定示例,您可以执行以下操作:

int arr[50];
// ... some code
int elem_count = sizeof(arr) / sizeof(arr[0]);

在这种情况下,sizeof(arr)部分将以字节为单位返回数组的总大小,sizeof(arr[0])将返回单个元素的大小(以字节为单位)。

然而,C风格的阵列带来了他们的问题。我并不是说永远不要使用它们,但请记住,例如,当它们作为函数参数传递时它们会调整为指针,上面的sizeof解决方案会给你一个答案,而不是你的答案。寻找,因为它会返回sizeof(int*)

对于实际动态分配的数组(其中所有内容都是指向该数组的指针),声明如下:

int *arr = new int[50];
// ... do some stuff
delete [] arr;

然后sizeof(arr)也会以字节为单位给出int*的大小,这不是您要查找的大小。

因此,正如评论建议的那样,如果您正在寻找一个方便随意的随机访问容器,您希望方便,便宜地跟踪大小,请使用std::vector,甚至是std::array

<强>更新

使用std::array生成与您问题中的代码相同的代码:

std::array<int, 50> arr;

然后像普通数组一样使用它。请记住,执行arr[100]之类的操作不会进行任何边界检查,但至少可以使用arr.size()获取数组的大小。