【问题标题】:Int array in C++C ++中的整数数组
【发布时间】:2013-04-27 11:06:44
【问题描述】:

我正在尝试遍历数组并在 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;
    }
}

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

【问题讨论】:

  • 数组不是 C++ 中的“对象”,因此没有关联的方法。错误“表达式必须具有类类型”表示:您只能调用类(或结构)上的方法。
  • 如果你确定你想要一个固定长度的数组,你可以把index_array.length()改成sizeof( index_array ) / sizeof( index_array[0] )
  • 对不起?你什么意思?能给我举个例子吗?
  • @Rauryn 你来自一种一切都是对象的语言。在 C++ 等低级语言中,情况并非如此。数组只是内存中的一个空间。它没有任何方法,甚至不知道它有多大。编译器会这样做(因为在这种情况下它是固定长度的),所以sizeof 可以告诉你。

标签: c++ arrays for-loop


【解决方案1】:

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

您可以拨打size(),如果有的话,例如vector&lt;int&gt; index_array

【讨论】:

  • 那么只有矢量适用于 .length 方法?而数组只能使用sizeof方法?
  • Vector 具有 size() 方法,可以满足您的需求。是的,原始数组没有方法。您所能做的就是对它们调用 sizeof operator
【解决方案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]);

【讨论】:

  • 我这样写向量:vector index_array {11,12,13,14,15,16,17,18,19,20};但是那里的第一个花括号有错误。怎么了?
  • 啊,我在-std=c++11模式下写了代码。您可以将编译器模式更改为 C++11 以获得初始化列表。
【解决方案3】:
int index_array [] = {11,12,13,14,15,16,17,18,19,20};

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

你可以做两件事之一。

第一种是使用 C++ 集合类之一,例如 std::vector(可调整大小)或 std::array(恒定大小)及其 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 将不再按预期工作。您需要在它仍然是一个数组时获取它的大小并将其与它一起传递。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • C++ 是一种区分大小写的语言。不是Array,而是array
    猜你喜欢
    • 2011-02-17
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2011-12-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多