Я обнаружил, что изменение моего подхода было очень полезно, когда сталкивался с подобной проблемой.
Вектор векторов выполнял ту же задачу, избегал препятствий для выделения памяти и сохранял ту же знакомую стенографию.Могут быть и другие подводные камни, но я еще не сталкивался с ними.
//Declaration of mValues, undefined size:
std::vector< std::vector<char> > mValues;
//Filling of mValues:
int max_x = 100 ;
int max_y = 100 ;
char char_foo = 'a';
for ( int x = 0; x <= max_x; ++x ) {
vector<char> temp;
for ( int y = 0; y <= max_y; ++y ) {
temp.push_back( char_foo );
}
mValues.push_back( temp );
}
// Referencing with familiar index notation:
mValues[a][b]; //The a-th row's b-th element
Если вы боретесь с массивами, но сильно желаете знакомого языка индексации, я нашел, что это хорошая альтернатива.
Обратите внимание, что порядок индексации A затем B будет критическим для использования памяти при вызове этих данных.Неспособность вызвать информацию в порядке A, B будет очень проблематичной, если производительность является проблемой.