有没有办法找出一个数组有多少个值?检测是否已经到达数组的末尾也可以工作。
当前回答
你可以简单地使用这段代码:
#include <iostream>
#include <string>
#include <array>
using namespace std;
int main()
{
array<int,3> values;
cout << "No. elements in valuea array: " << values.size() << " elements." << endl;
cout << "sizeof(myints): " << sizeof(values) << endl;
}
这里是参考资料:http://www.cplusplus.com/reference/array/array/size/
其他回答
如果你指的是c风格的数组,那么你可以这样做:
int a[7];
std::cout << "Length of array = " << (sizeof(a)/sizeof(*a)) << std::endl;
这对指针不起作用(即它对以下任何一个都不起作用):
int *p = new int[7];
std::cout << "Length of array = " << (sizeof(p)/sizeof(*p)) << std::endl;
or:
void func(int *p)
{
std::cout << "Length of array = " << (sizeof(p)/sizeof(*p)) << std::endl;
}
int a[7];
func(a);
在c++中,如果你想要这种行为,那么你应该使用容器类;可能std::向量。
有没有办法找出一个数组有多少个值?
Yes!
尝试sizeof(数组)/ sizeof(阵列[0])
检测是否已经到达数组的末尾也可以工作。
我看不到任何方法,除非你的数组是一个字符数组(即字符串)。
注:在c++中总是使用std::vector。有几个内置函数和一个扩展功能。
执行sizeof myArray将得到分配给该数组的总字节数。然后,您可以通过除以数组中一个元素的大小来找出数组中的元素数量:sizeof myArray[0]
所以,你会得到这样的东西:
size_t LengthOfArray = sizeof myArray / sizeof myArray[0];
由于sizeof产生size_t,结果LengthOfArray也将是这种类型。
虽然这是一个老问题,但值得将答案更新到c++ 17。在标准库中,现在有一个模板化函数std::size(),它返回std容器或c风格数组中的元素数量。例如:
#include <iterator>
uint32_t data[] = {10, 20, 30, 40};
auto dataSize = std::size(data);
// dataSize == 4
避免将类型与sizeof一起使用,因为如果改变数组类型,sizeof(array)/sizeof(char)会突然被破坏。
在visual studio中,你有等效的if sizeof(array)/sizeof(*array)。 你可以输入_countof(array)