3
#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
    }
}

我在这里做错了什么,因为计划只是用一些数字填充数组

4

4 回答 4

10

做这个:

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来访问arrayTestas arrayTest[i]where的元素i可以从0to变化size-1(包括)。

于 2013-09-23T17:23:02.513 回答
5

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
}
于 2013-09-23T17:23:18.733 回答
3

数组没有成员。你必须使用类似的东西:

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);
于 2013-09-23T17:23:09.383 回答
0

如果你被数组卡住了,你可以定义你的 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 仍然是更好的解决方案。

于 2013-09-23T18:24:55.247 回答