我创建了一个大小为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,但我只是在使用数组来查找那种类型的东西。
感谢您的回复
答案 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()
获取数组的大小。