Векторы 2d+ вызывают снижение производительности?

Я работаю над синтезатором, и у меня есть код, который работает медленнее, чем хотелось бы. Я сузил преступника до нескольких вложенных циклов, которые перебирают трехмерный вектор с плавающей точкой. Учитывая, что эта часть моего кода является текущим узким местом, я хотел бы оптимизировать ее как можно лучше.

Мое текущее понимание массивов 2d C состоит в том, что они на самом деле представляют собой один длинный линейный массив с некоторым причудливым синтаксисом.

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

Что касается векторов, (когда 1D) производительность кажется достаточно широкой ( Использование массивов или std::vectors в C++, каков разрыв производительности?) С проблемами, возникающими больше из-за изменения размера, чем доступа / установки. Но когда 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+ мерные векторы не идеальны, какие есть хорошие альтернативы?

0 ответов

Другие вопросы по тегам