2d +向量会导致性能下降吗?

时间:2019-03-03 21:35:22

标签: c++ arrays stdvector

我正在开发合成器,并且我的某些代码的运行速度比我想要的慢。我将罪魁祸首的范围缩小到一些嵌套的for循环,这些循环遍历浮点数的​​3维向量。鉴于我的代码这部分是当前的瓶颈,我想尽最大可能对其进行优化。

我目前对2D C数组的理解是,它们实际上只是一个长的线性嵌套数组,带有一些奇特的语法。

int* myArray[3][3];
pseudoSetEntriesToRowNum(myArray);
for (int i = 0; i < 9; i++) {
  cout << myArray[i];
}
// output: 000111222

对于矢量,(一维时)性能似乎已经足够(Using arrays or std::vectors in C++, what's the performance gap?),而调整大小比访问/设置引起的问题更多。但是在2d时,我的理解是,线性嵌套优化会丢失,并且对于每个维都遵循指针。

vector<vector<int>> myVector = pseudoMake2dVectorWithRowNumAsEntries(3, 3);
int* myArray = &(myVector[0][0]);
for (int i = 0; i < 9; i++) {
  cout << myArray[i];  // this should not be okay
}
// (my guess of) output: 0,0,0, BAD_ACCESS * 6

首先,关于这个主题的问题是我是否正确考虑了?而且,如果是的话,这是否意味着2D +维向量不适用于对时间敏感的操作?如果2D +维向量不是理想的,那么有什么好的替代方法?

0 个答案:

没有答案