我正在开发合成器,并且我的某些代码的运行速度比我想要的慢。我将罪魁祸首的范围缩小到一些嵌套的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 +维向量不是理想的,那么有什么好的替代方法?