C ++获取数组中的数据量?

时间:2017-02-26 03:29:24

标签: c++ arrays

我这里有一个简单的数组:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };

如何获取数组内的数据?由于数组设置为10,但内部只有5个数据。

我希望的结果应该是这样的:

int icount = sizeof(someNumbers); // This is wrong, but I have no idea how..
cout << icount << endl;

我需要icount返回5而不是10.我怎么能这样做?

5 个答案:

答案 0 :(得分:0)

由于您使用的是预定义大小的静态数组,因此您必须使用for循环来运行数组。见这里的例子:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };
int icount = 0;
for (int i = 0; i < 10; i++)
{
    if (someNumbers[i])
        icount++;
}

cout << icount << endl;

一些背景资料。如果用户未设置分配给此阵列的其中一个内存块,则它将存储空值。因此,如果我们执行if(isNumber[i]),那么如果someNumber的{​​{1}}填充了某个值,它将返回true,如果未填充值,则返回false。

这就是for-loop在我发布的代码中的工作原理。对于循环的每次运行,当if语句为真时(如果i有值),则计数器递增。

编辑:此解决方案正常;对于你的数组,它将输出5.它也适用于任何int数组;只需将计数器更改为小于为阵列指定的静态大小即可运行。

编辑2:只要数组中没有零,此解决方案就会起作用,因为零将伪造if条件。请参阅此stackoverflow帖子中的更多内容:Find the count of elements in array in C++。要克服这个障碍,建议您使用std :: vector,或使用计数器变量并更新数组中手动​​填充此变量的确切内存位置数。

答案 1 :(得分:0)

这样做:

#include<iostream>

using namespace std;

int main(){
    int someNumbers[10] = { 16, 2, 77, 40, 12071 };
    int count = 0;
    int i = 0;
    for(i = 0; i < sizeof(someNumbers) / sizeof(int); i++){
        if(someNumbers[i]){
            count = count + 1;
        }
    }

    cout << count << endl;

    return 0;
}

我单独使用if(someNumber[i]),因为只要someNumber [i]未定义,这将返回true。因此,这有效。

这是输出:

5

你总是可以将它作为一个单独的函数:

#include<iostream>

using namespace std;

int dataInArray(int someNumbers[], int size);

int main(){
  int someNumbers[10] = { 16, 2, 77, 40, 12071, 2};
    int count = dataInArray(someNumbers, 10);
    cout << count << endl;
  return 0;
}

int dataInArray(int someNumbers[], int size){
    int count = 0;
    int i = 0;
    for(i = 0; i < size; i++){
        if(someNumbers[i]){
            count = count + 1;
        }
    }
    return count;
}

答案 2 :(得分:0)

你要求的是不可能的,因为根据语言规则,之间没有任何区别:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };

int someNumbers[10] = { 16, 2, 77, 40, 12071, 0, 0, 0, 0, 0 };

他们两个肯定都会初始化所有十个元素。

如果您有兴趣找到第一个零(无论是由程序员打字还是由语言规则暗示),那么@ ABusyProgrammer的答案将有所帮助。

如果你需要计算程序员键入的零,那么你必须让编译器推断出初始化程序中的数组(或注释中提到的initializer_list)长度,如@Kelm的答案所示。

无法同时检测程序员输入的零并指定数组大小。

答案 3 :(得分:-1)

使用此:

int someNumbers[] = { 16, 2, 77, 40, 12071 };
cout << sizeof(someNumbers)/sizeof(int) <<endl;

这是因为sizeof(someNumbers)没有给出数组的计数,而是它给出的总字节数。因此将其除以sizeof(int),它将为您提供数组中的整数数。

此外,如果在声明数组时指定[10],则数组的计数将为10,无论是否使用较少的值进行初始化。上面显示的方式是空[],它将根据指定的元素数自动设置计数。

ideone link

答案 4 :(得分:-4)

这应该这样做:

int someNumbers[] = {1,2,3,4,5,6};
int icount = sizeof(someNumbers) / sizeof(int);