【发布时间】:2021-04-05 14:11:30
【问题描述】:
如果我创造
std::vector<std::array<double, 2>> points;
std::vector<double> points2;
我知道 points2 将是一个连续的内存块,在堆中保存双精度数。我认为这些点将是堆栈的 double* 的连续内存块?但是这些数组在堆栈中会是连续的吗?假设我存储了成对的双精度来表示一些点。
points2 在内存中是这样的:[x0 y0 x1 y1 x2 y2 ...] 积分呢?在这种情况下,存储双打的最佳方式是什么?感谢您的任何提示。
【问题讨论】:
-
我会使用
struct Point { double x; double y; }和vector<Point> points; -
这能回答你的问题吗? std::vector of std::vectors contiguity
-
std::array是 C 样式数组的薄包装器。所以它存储实际的数组,而不是指向数组的指针 -
@scohe001 为什么你希望 std::array 在这方面表现得像 std::vector ?你明白两者的区别了吧?
-
“在这种情况下,存储双精度对的最佳方法是什么?” — 这可能取决于您要对它们执行的操作。在某些情况下,将它们存储为两个单独的向量(x 和 y 坐标)可能会更好。您可能还希望提供比默认对齐更强大的对齐方式,以使它们对 SIMD/缓存更友好。
标签: c++ arrays performance vector multidimensional-array