2016-01-11 4 views
0

Пусть в C есть следующий код:Правильная инициализация многомерного вектора

const unsigned char C[12][64] = { 
     { 
      0xB1, 0x08, 0x5B, 0xDA, 0x1E, 0xCA, 0xDA, 0xE9, 0xEB, 0xCB, 0x2F, 0x81, 0xC0, 0x65, 0x7C, 0x1F, 
      0x2F, 0x6A, 0x76, 0x43, 0x2E, 0x45, 0xD0, 0x16, 0x71, 0x4E, 0xB8, 0x8D, 0x75, 0x85, 0xC4, 0xFC, 
      0x4B, 0x7C, 0xE0, 0x91, 0x92, 0x67, 0x69, 0x01, 0xA2, 0x42, 0x2A, 0x08, 0xA4, 0x60, 0xD3, 0x15, 
      0x05, 0x76, 0x74, 0x36, 0xCC, 0x74, 0x4D, 0x23, 0xDD, 0x80, 0x65, 0x59, 0xF2, 0xA6, 0x45, 0x07 
     }, 
     { 
      0x6F, 0xA3, 0xB5, 0x8A, 0xA9, 0x9D, 0x2F, 0x1A, 0x4F, 0xE3, 0x9D, 0x46, 0x0F, 0x70, 0xB5, 0xD7, 
      0xF3, 0xFE, 0xEA, 0x72, 0x0A, 0x23, 0x2B, 0x98, 0x61, 0xD5, 0x5E, 0x0F, 0x16, 0xB5, 0x01, 0x31, 
      0x9A, 0xB5, 0x17, 0x6B, 0x12, 0xD6, 0x99, 0x58, 0x5C, 0xB5, 0x61, 0xC2, 0xDB, 0x0A, 0xA7, 0xCA, 
      0x55, 0xDD, 0xA2, 0x1B, 0xD7, 0xCB, 0xCD, 0x56, 0xE6, 0x79, 0x04, 0x70, 0x21, 0xB1, 0x9B, 0xB7 
     }, 

and so on 

Как преобразовать его в std::vector так, чтобы вектор был инициализирован все необходимые значения?

Под вектором я предполагаю, что-то вроде vector< vector<uint8_t> >

Или, может быть, я бы лучше использовать boost::multi_array?

+1

Использование 'VECTOR' для массивов, которые не требуют динамического изменения размера является излишеством. Посмотрите на 'std :: array'. Или даже сохраните свой 'char [] []'. –

+0

дубликат http://stackoverflow.com/questions/2236197/what-is-the-easiest-way-to-initialize-a-stdvector-with-hardcoded-elements – RyanP

ответ

2

Начиная с C++ 11 вы можете инициализировать вектор с помощью списка инициализаторов. Вы можете просто изменить

const unsigned char C[12][64] = ... 

Для

std::vector<std::vector<unsigned char>> C = ... 

Live Example

+0

И я думаю, что он мог бы использовать ту же идею для любого Контейнер STL, нет? Ну, кроме карт, но по другим причинам, кроме этого. – SirGuy

+0

@GuyGreer Он должен работать и стандартный контейнер, который поддерживает конструктор списка инициализаторов. «std :: map» также может быть создан с этим. см.: http://coliru.stacked-crooked.com/a/4c93f8b914031a25 – NathanOliver

+0

Все, что я имел в виду, что карты не работают, так это то, что вам нужно передать пару, что было «другими причинами, чем это», о котором я говорил. Небольшая точка в конце. – SirGuy

Смежные вопросы