このブログを検索

2019年4月16日火曜日

【C++】 std::vector動的3次元配列

【C++】 std::vector動的3次元配列
(2019年4月16日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順

以下の2種類の方法を記載

emplace_back
resize


<emplace_back>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <vector>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];
    /*data[0][0][0]=3, data[1][0][0]=3, data[0][1][0]=3, data[1][1][0]=3,
      data[0][0][1]=3, data[1][0][1]=3, data[0][1][1]=3, data[1][1][1]=3で初期化

      data(X, std::vector<std::vector<int> >(Y, std::vector<int>(Z, S)))→data[X][Y][Z]全てSで初期化*/
    std::vector<std::vector<std::vector<int> > > data(2, std::vector<std::vector<int> >(2, std::vector<int>(2, 3)));

    data[0][0].emplace_back(6);//data[0][0][2]=6を追加
    data[0][0].emplace_back(7);//data[0][0][3]=7を追加
    data[0].emplace_back(1, 4);//data[0][2][0]=4を追加
    data[0].emplace_back(1, 5);//data[0][3][0]=5を追加
    //data[2][0][0]=8, data[2][1][0]=8, data[2][0][1]=8, data[2][1][1]=8を追加
    data.emplace_back(std::vector<std::vector<int> >(2, std::vector<int>(2, 8)));

    swprintf(wcText, 256, L"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", data[0][0][0], data[1][0][0], data[0][1][0], data[1][1][0],
        data[0][0][1], data[1][0][1], data[0][1][1], data[1][1][1], data[0][0][2], data[0][0][3], data[0][2][0], data[0][3][0],
        data[2][0][0], data[2][1][0], data[2][0][1], data[2][1][1]);

    MessageBox(NULL, wcText, L"vector動的3次元配列", MB_OK);

    return 0;
}

配列イメージ

3.std::vector動的3次元配列


<resize>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <vector>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];
    /*data[0][0][0]=3, data[1][0][0]=3, data[0][1][0]=3, data[1][1][0]=3,
      data[0][0][1]=3, data[1][0][1]=3, data[0][1][1]=3, data[1][1][1]=3で初期化

      data(X, std::vector<std::vector<int> >(Y, std::vector<int>(Z, S)))→data[X][Y][Z]全てSで初期化*/
    std::vector<std::vector<std::vector<int> > > data(2, std::vector<std::vector<int> >(2, std::vector<int>(2, 3)));

    //data.resize(X, std::vector<std::vector<int> >(Y, std::vector<int>(Z, T)))→data[X][Y][Z]でサイズ変更し増えた分を全てTで初期化*/
    data.resize(3, std::vector<std::vector<int> >(2, std::vector<int>(2, 9)));

    swprintf(wcText, 256, L"%d %d %d %d %d %d %d %d %d %d %d %d", data[0][0][0], data[1][0][0], data[0][1][0], data[1][1][0],
        data[0][0][1], data[1][0][1], data[0][1][1], data[1][1][1], data[2][0][0], data[2][1][0], data[2][0][1], data[2][1][1]);

    MessageBox(NULL, wcText, L"vector動的3次元配列", MB_OK);

    return 0;
}

配列イメージ

3.std::vector動的3次元配列

0 件のコメント:

コメントを投稿