У меня есть приложение Visual Studio 2008 C++ 03, где я хотел бы инициализировать std :: vector на основе двухмерного массива.инициализация вектора на основе массива 2d
Например:
#define DATA_SIZE 6
struct Data
{
UINT a;
BYTE b;
BYTE c;
BYTE d;
Data()
: /* initialize all members to 0*/
{
};
explicit Data(const BYTE data[ DATA_SIZE ])
: a(data[ 0 ] << 16 | data[ 1 ] << 8 | data[ 2 ]),
b(data[ 3 ]),
c(data[ 4 ]),
d(data[ 5 ])
{
};
};
inline bool operator==(const Data& lhs, const Data& rhs)
{
return /* true if all members are equal */
};
int main(int argc, char* argv[])
{
const BYTE source[][ DATA_SIZE ] =
{
{ 0x01, 0xfe, 0xaa, 0x01, 0xcc, 0x13 },
{ 0x02, 0xa1, 0x02, 0xbb, 0x02, 0xdd }
}
// how should this be done?
std::vector<Data> data_list(source[ 0 ], source[ countof(source) - 1 ]);
ASSERT(data_list[ 0 ] == Data(source[ 0 ]));
ASSERT(data_list[ 1 ] == Data(source[ 1 ]));
return 0;
}
Есть ли способ сделать это без for
петли перебора каждого элемента в массиве data
и вызывающего push_back
?
@ildjarn - отредактировано, чтобы сделать это более четким. – PaulH
Если вы удалили ключевое слово 'explicit ', это не позволило бы компилятору неявно преобразовывать массивы BYTE в объекты Data? – Dennis
Если вы использовали 'std :: tr1 :: array' вместо сырых C-массивов, это было бы совершенно тривиально. –
ildjarn