#include <cstdlib>
using namespace std;
int main()
{
int arrayTest[512];
int size = arrayTest.size();
for(int a = 0;a<size;a++)
{
//stuff will go here
}
}
我在这里做错了什么,因为计划只是用一些数字填充数组
做这个:
int arrayTest[512];
int size = sizeof(arrayTest)/sizeof(*arrayTest);
C 风格的数组没有成员函数。他们没有阶级的概念。
无论如何,更好地使用std::array
:
#include <array>
std::array<int,512> arrayTest;
int size = arrayTest.size(); //this line is exactly same as you wrote!
这看起来像你想要的。现在您可以使用索引i
来访问arrayTest
as arrayTest[i]
where的元素i
可以从0
to变化size-1
(包括)。
arrayTest
不是类或结构,而是数组,并且它没有成员函数,在这种情况下,这将获得数组的大小:
size_t size = sizeof(arrayTest)/sizeof(int);
虽然如果你的编译器支持C++11比使用std::array会更好:
#include <array>
std::array<int,512> arrayTest ;
size_t size = arrayTest.size() ;
正如上面链接的文档所示,您还可以使用 range for 循环来迭代std::array的元素:
for( auto &elem : arrayTest )
{
//Some operation here
}
数组没有成员。你必须使用类似的东西:
int size = sizeof(arrayTest) / sizeof(arrayTest[0]);
更好的是,如果您必须使用普通数组而不是std::array
,请使用辅助函数。当您在指针而不是数组上尝试它时,这还具有不会中断的优点:
template<int N, typename T> int array_size(T (&)[N]) {return N;}
int size = array_size(arrayTest);
如果你被数组卡住了,你可以定义你的 getArraySize 函数:
template <typename T,unsigned S>
inline unsigned getArraySize(const T (&v)[S]) { return S; }
在这里看到:http ://www.cplusplus.com/forum/general/33669/#msg181103
std::array 仍然是更好的解决方案。