【问题标题】:Which is best for a list of points: an array of point structs or a 2 dimensional array?哪个最适合点列表:点结构数组还是二维数组?
【发布时间】:2020-09-17 18:09:03
【问题描述】:

我需要一个数组,其中每个成员都有 3 个相同类型的元素。我可以使用结构数组或二维数组。

// Array of structs:
struct point {  double x, y, z; };
struct point path[20000];  
// Now access z by
path[i].z
// 2-dimensional array:
double path[20000][3];
// Access z by
path[i][2]

哪种方法最有效?还是一样?

【问题讨论】:

  • 效率真的很难抽象地谈论,因为不同的方法和不同的权衡。在这种情况下,它们大致相同,但命名为 x/y/z 的字段读起来更好。另外,Point 抽象在整体上真的很有用
  • 我冒昧地建议,除非你想节省字节或微秒,否则你应该使用最有表现力的版本。毕竟,必须有人维护这些东西。

标签: arrays c struct


【解决方案1】:

没有区别。

如果我没记错的话,理论上允许编译器在struct point 的成员之间插入填充字节,但在这种情况下没有一个理智的编译器会这样做。

【讨论】:

    【解决方案2】:

    struct point { double x, y, z; }; 可能会产生填充 - 尽管不太可能。
    double path[20000][3]; 没有填充。

    在这种情况下,为了清晰起见,我建议编写代码。
    由于评论提示访问是z,所以使用.z而不是[2]

    // Now access z by
    path[i].z
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多