Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何计算预定义数组中的元素数_C++_Arrays - Fatal编程技术网

C++ 如何计算预定义数组中的元素数

C++ 如何计算预定义数组中的元素数,c++,arrays,C++,Arrays,我想计算数组中元素的实际数量。 但是如果我使用sizeof()语句,它会给出数组的大小。不是存在元素的数量 int main() { int a[10],n; a[0]=1; a[1]=5; a[2]=6; n=sizeof(a)/sizeof(a[0]); cout<<"The size of array " <<n; } intmain() { int a[10],n; a[0]=1; a[1]=5; a[2]=6; n=sizeof(a)/size

我想计算数组中元素的实际数量。 但是如果我使用sizeof()语句,它会给出数组的大小。不是存在元素的数量

int main()
 {
 int a[10],n;
 a[0]=1;
 a[1]=5;
 a[2]=6;
 n=sizeof(a)/sizeof(a[0]);
 cout<<"The size of array " <<n;
 }
intmain()
{
int a[10],n;
a[0]=1;
a[1]=5;
a[2]=6;
n=sizeof(a)/sizeof(a[0]);
库特
解决方案1(简单):

#include <vector>

vector<int> a;
a.push_back(1);
a.push_back(2);
size_t size = a.size(); // to get the size of your vector. would return 2. size_t is the actual type returned by size() method and is an unsigned int.
#包括
载体a;
a、 推回(1);
a、 推回(2);
size_t size=a.size();//获取向量的大小。将返回2。size_t是size()方法返回的实际类型,是无符号int。
解决方案2(复杂):

#include <vector>

vector<int> a;
a.push_back(1);
a.push_back(2);
size_t size = a.size(); // to get the size of your vector. would return 2. size_t is the actual type returned by size() method and is an unsigned int.
您可以创建一个可以调用的
int
变量,例如
numberOfElements
,并在每次添加元素时更新它。
此解决方案实际上用于vector类的实现。

如前所述,您应该使用std::vector或std:array来实现此行为。声明简单数组意味着您在堆上分配了足够的内存。无法确定此内存是否“被占用”因为总是有一些东西(分配后数组的每个索引上都有随机值)。

使用
std::vector
代替。或者
std::array
…为什么它会给出3?数组有10个项。将值分配给数组元素,如
a[0]=1;
不会更改此数组中元素的数量。@GPhilo也不允许对占用的元素进行计数。如果您也这样做了,
a[6]=6
,您希望得到什么答案?应该是4还是7?可能总是有“某物”,但通常是那些“某物”无法检查。访问数组中未初始化的元素会导致未定义的行为。是的,这是正确的。我想解释为什么没有一种简单的方法来确定内存的特定部分是否被分配了“有效”值。我不同意并放弃此解决方案,因为他要求使用基本数组[],而不是std::vector或std::array@SkillerDz我理解他提出的要求,这就是为什么我提到解决方案2,这是计算C数组中元素的方法。解决方案1是一个他可能知道也可能不知道的建议。@SkillerDz如果不使用额外内存,就无法完成问题要求的操作(除非您将一个特定的
int
值保留为sentinel,这是您不能假设的)。这正是解决方案2解释的方法。如前所述,
std::vector
正是为您这样做的。
std::vector
不使用
int
来表示大小。它使用名为
std::vector::size\u type的无符号类型(实际上,在大多数实现中,即使不需要)is
std::size\u t
@Peter您是对的,我在解决方案1中提到了这一点,但在解决方案2中我保持了模糊。