c++ - 基于二维数组初始化 vector

标签 c++

我有一个 Visual Studio 2008 C++03 应用程序,我想在其中初始化一个基于二维数组的 std::vector。

例如:

#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

最佳答案

您可以做的最少更改是:

std::vector< Data > data_list(
  &source[ 0 ],
  &source[ countof( source) ] );

关于c++ - 基于二维数组初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689090/

相关文章:

c++ - 拥有大型二维数组 : static int vs int

c++ - 如何捕捉键盘和鼠标事件?

c++ - 类型分组 模板的显式实例化

c++ - 将模板类作为参数传递

c++ header file compiler issue (Sales_item.h) c++ 入门示例

C++ Eclipse NEON : non-aggregate type 'string' cannot be initialized with an initializer list

c++ - 缓冲putc写

c++ - std::atomic <>后递增何时发生?

c++ - 使用 std::shared_ptr 而不是 boost::shared_ptr 时编译失败

c++ - << 的运算符重载需要 const;产生头痛