У меня есть система, где мне нужно получить «коды» для конкретных позиций. Существует постоянное количество позиций от 1 до 40, однако каждая позиция может иметь разное количество кодов (от 2 до 20). Контейнер является постоянным, его нужно определить, а затем просто использовать для поиска позиций для остальной части программы.
Например, мне нужно быть в состоянии сделать что-то вроде myCodes.at(position3)
и получить {1, 3, 9, 23, 52}
а также myCodes.at(position7)
и получить {23, 52}
Итак, внешний контейнер имеет постоянный размер, но внутренний контейнер может варьироваться по размеру от 2 до 20. Я знаю, как это сделать, используя массивы, и просто сделаю второе измерение максимально возможным размером (20): const int myCodes[40][20]
, а затем просто «дополнить» внутренний массив дополнительными нулями.
Тем не менее, это кажется действительно расточительным, особенно потому что многие из внутренних массивов будут содержать только 2 элемента. Я также работаю над изучением C ++ 11, поэтому я бы предпочел «современное» решение, если оно есть.
Это скорее всего то, что вы хотите:
std::array<std::vector<code>, const_size>
Внешнее постоянно, а внутреннее динамично.
И то, и другое будет постоянным, и использование заполнения будет быстрее, но намного уродливее, поэтому не пытайтесь сначала. 18 * 20 неиспользованных целых не является большой тратой на современное оборудование.
Для безумного подхода — набор std-массивов различного размера плюс массив пар итераторов для начала / конца массивов. Первое приводит к неоднородному непрерывному блоку, если память, второе дает вам доступ к нему с единым диапазоном. В теории второе вычислимо на лету, но я бы просто кешировал его.
Код для превращения кортежа массивов в массив пар будет интересно написать.
Ну, на самом деле я бы сделал предыдущий ответ массива векторов или даже вектора векторов. Но эта методика демонстрирует, как вы можете получить бахит с современным C ++ 11.
Вы должны использовать либо массив vectors
или массив lists
,
std::array<std::vector<MyType>, const_size>
std::array<std::list<MyType, const_size>
Обе структуры являются статическими в одном измерении и динамическими в другом.