更现代的循环 C 数组的方法

新手上路,请多包涵

最近我发现了很多例子,其中大部分都是关于 C++ 98,无论如何我已经创建了我的简单数组和一个循环( codepad ):

 #include <iostream>
using namespace std;

int main ()
{
   string texts[] = {"Apple", "Banana", "Orange"};
   for( unsigned int a = 0; a < sizeof(texts); a = a + 1 )
   {
       cout << "value of a: " << texts[a] << endl;
   }

   return 0;
}

输出:

价值一:苹果
a的价值:香蕉
a的值:橙色

分段故障

它工作正常,除了最后的分段错误。

我的问题是,这个数组/循环是否做得很好?我正在使用 C++ 11,所以想确保它符合标准并且不能做得更好?

原文由 Lucas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
2 个回答

在 C/C++ sizeof 中。总是给出整个对象的字节数,数组被视为一个对象。注意: sizeof 指向数组的第一个元素或单个对象的指针-给出 指针 的大小,而不是指向的对象。无论哪种方式, sizeof没有 给出数组中元素的数量(它的长度)。要获得长度,您需要除以每个元素的大小。例如。,

 for( unsigned int a = 0; a < sizeof(texts)/sizeof(texts[0]); a = a + 1 )

至于以 C++11 的方式来做,最好的方法可能是

for(const string &text : texts)
    cout << "value of text: " << text << endl;

这让编译器可以计算出您需要多少次迭代。

正如其他人指出的那样, std::array 在 C++11 中优于原始数组;但是,其他答案都没有解决为什么 sizeof 失败了,所以我仍然认为这是更好的答案。

原文由 Nicu Stiurca 发布,翻译遵循 CC BY-SA 4.0 许可协议

In my point of view:
It is because the sizeof() operator returns the size
of a type in bytes.
So, Simply we can use size() instead of sizeof(). If
we need or must use sizeof() we have to divide it
with sizeof(dataType):

First way:
#include <iostream>
using namespace std;

int main ()
{
   string texts[] = {"Apple", "Banana", "Orange"};
   for(int a = 0; a < size(texts); a++){
   cout << "value of a: " << texts[a] << endl;
   }

   return 0;
  }

Second way:
#include <iostream>
using namespace std;

int main ()
{
   string texts[] = {"Apple", "Banana", "Orange"};
   for(int a=0; a<sizeof(texts)/sizeof(string); a++)
{
   cout << "value of a: " << texts[a] << endl;
}

 return 0;
}

原文由 Sina molaverdikhani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题