92929


以下の場合、dataに初期値(2*2配列、値1)を与えるにはどの様に書けば良いでしょうか？

[code]

    struct 構造体名 {
        int x;
        int y;
    }    
    
    std::shared_ptr<std::vector<std::vector<構造体名>>> data;
    
[/code]

以下の様に試してみましたが、配列サイズが０な為か値が出力されませんでした。

[code]

    for (const auto& data : *data) {
        for (const auto& data_info: data) {
        data_info.x = 1;
        data_info.y = 1;
        }
    }
    
[/code]

※追記

[code]

    #include <bits/stdc++.h>
    
    struct SomeData {
        int  x;
        int  y;
        SomeData():
            x(0),
            y(0){}
        SomeData(int _num1, int _num2):
            x(_num1),
            y(_num2){}
    };
    
    struct Data{
        std::shared_ptr<std::vector<std::vector<SomeData>>> data;  //☆
    };
    
    void func(const Data& data_info)
    {
        auto data = std::make_shared<std::vector<std::vector<SomeData>>>();
        data->push_back({{1,1},{1,1}});
    　　　　　　　　data->push_back({{1,1},{1,1}});
        
    　　　　　　　　for (const auto& data : *data) {
            for (const auto& data_info : data){
                std::cout << "x :"<< data_info.x << std::endl;
                std::cout << "y :" << data_info.y << std::endl;
            }
        }
    }
    
    int main(const Data& data_info)
    {
        func(data_info);
    
        return 0;
    }
    
[/code]

**出力結果:**

[code]

    x :1
    y :1
    x :1
    y :1
    x :1
    y :1
    x :1
    y :1
    
[/code]


CC BY-SA 4.0
2022-12-20T06:01:58.640
92911
2022-12-21T07:28:55.650
2022-12-21T04:28:45.373
3060
55686
question
c++
std::shared_ptr<std::vector<std::vector<>>> の値を初期化するにはどう記述すればよい？


初期化で全てを済ませたい場合は、以下のような感じです。

[code]

    using T = std::vector<構造体名>;
    auto data = std::make_shared<std::vector<T>>(
        std::initializer_list<T>{
            {{1, 1}, {1, 1}},
            {{1, 1}, {1, 1}}});
    
[/code]

`push_back()` を使ってもいい場合は、

[code]

    auto data = std::make_shared<std::vector<std::vector<構造体名>>>();
    data->push_back({{1, 1}, {1, 1}});
    data->push_back({{1, 1}, {1, 1}});
    
[/code]


CC BY-SA 4.0
2022-12-20T06:50:16.077
92912
2022-12-20T06:50:16.077
3475
92911
answer


> この場合、dataに初期値(2*2配列、値1)を与えるにはどの様に書けば良いでしょうか？

参考 initializer_list を使わない場合の例です。

[code]

    using T = std::vector<SomeData>;
    std::shared_ptr<std::vector<T>> data = std::make_shared<std::vector<T>>(2, T(2, SomeData(1, 1)));
    
[/code]

初期化ではなく後で初期値を設定したい場合の例です。

[code]

    using T = std::vector<SomeData>;
    std::shared_ptr<std::vector<T>> data;
    
    std::shared_ptr<std::vector<T>> tmp = std::make_shared<std::vector<T>>(2, T(2, SomeData(1, 1)));
    data.swap(tmp)
    
[/code]


CC BY-SA 4.0
2022-12-21T02:03:55.243
92929
2022-12-21T07:28:55.650
2022-12-21T07:28:55.650
41756
41756
92911
answer