-4

我正在尝试遍历数组并在 C++ 中获取元素。这是我的代码:

int result;
int index_array [] = {11,12,13,14,15,16,17,18,19,20};

for (int count =0; count < index_array.length() ; count++){
  if(count%2 == 0){
    cout << "Elements at the even index are " << index_array[count] << endl;
  }
}

如果我将for循环更改为:

for (int count =0; count < 10 ; count++){

没有错误,因为我的数组仅包含 10 个项目。但是如果我使用该.length()方法,则会出现错误,即表达式必须具有类类型。我不知道它是什么,就像它在 Eclipse 中一样,其中包含更详细的错误描述。有人可以告诉我有什么问题吗?

更新答案:

    for (int count =0; count < sizeof(index_array)/sizeof(index_array [0]) ; count++){
    if((count+1)%2 == 0){
        cout << "Elements at the even index are " << index_array[count] << endl;
    }
}

我不明白为什么我的线程被否决了。我确实清楚地解释了我的问题,我发布了我的解决方案并更新了答案。因此,对于那些投反对票的人,请删除您的反对票。谢谢。

4

4 回答 4

6

你不能调用length()on int index_array[],它是一个原始数组,而不是一个对象。

size()例如,如果您有,您可以致电vector<int> index_array

于 2013-04-27T11:08:56.697 回答
2

C++中没有.length普通数组。而是使用std::vector并且您可以使用方法size()

std::vector<int> index_array {11,12,13,14,15,16,17,18,19,20};

for (int count =0; count < index_array.size() ; count++){
    if(count%2 == 0){
        cout << "Elements at the even index are " << index_array[count] << endl;
    }
}

同样在您的情况下,您可以计算数组的长度:

int length = sizeof(index_array)/sizeof(index_array[0]);
于 2013-04-27T11:10:06.483 回答
1
int index_array [] = {11,12,13,14,15,16,17,18,19,20};

这不是您可以调用某些length()方法的对象。相反,它是一个常规数组,就像在 C 中一样。

你可以做两件事之一。

第一种是使用 C++ 集合类之一,例如std::vector(adjustable size) 或std::array(constant size) 及其size()方法:

// C++11 syntax
std::vector<int> index_array {11,12,13,14,15,16,17,18,19,20};

// Pre C++11 syntax
int ia_src[] = {11,12,13,14,15,16,17,18,19,20};
vector<int> index_array (ia_src, ia_src + sizeof (ia_src) / sizeof (*ia_src));

std::array<int,10> index_array = {11,12,13,14,15,16,17,18,19,20};

第二种是将数组简单地视为数组,在这种情况下,可以使用表达式找到该数组的长度:

sizeof (index_array) / sizeof (*index_array)

请注意,这只适用于数组。如果将该数组传递给函数,它将衰减为指向第一个元素的指针,并且sizeof不再按预期工作。您需要在它仍然是一个数组时获取它的大小并将其传递给它。

于 2013-04-27T11:19:36.260 回答
0

c++ 中的数组不是对象(类),因此它们既没有方法也没有属性。也许您可以改用 Array 类并获得类似的大小std::array::size()

于 2013-04-27T11:13:11.033 回答