简体   繁体   English

struct emplace_back的3D矢量

[英]3D Vector of struct emplace_back

This isn't working. 这不起作用。 And the reason why is cryptic to me. 而这对我来说是个谜。

PS: Using C++11 PS:使用C ++ 11

http://ideone.com/elopRc http://ideone.com/elopRc

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    struct MyStruct {
        size_t some_num;
        char some_char;
        bool some_bool;
        MyStruct* some_ptr;
    };

    vector<vector<vector<MyStruct>>> three_d_struct_v;

    size_t max_i = 100;
    size_t max_j = 10;
    size_t max_k = 10;

    for(size_t i = 0; i < max_i; i++) {
        for(size_t j = 0; j < max_j; j++) {
            for(size_t k = 0; k < max_k; k++) {
                three_d_struct_v.emplace_back(k, 'x', false, nullptr);
            }
        }
    }


    return 0;
}

Here, three_d_struct_v is of type vector<vector<vector<MyStruct>>> , ie a vector of vector<vector<MyStruct>> , so you need to add element of type vector<vector<MyStruct>> (likewise for nested dimensions). 这里, three_d_struct_v的类型为vector<vector<vector<MyStruct>>> ,即vectorvector<vector<MyStruct>> ,所以需要添加型的元件vector<vector<MyStruct>> (同样为嵌套的尺寸) 。 However, in your code, you are adding element of type MyStruct directly. 但是,在您的代码中,您将直接添加MyStruct类型的元素。

You need to change to something like: 您需要更改为以下内容:

for(size_t i = 0; i < max_i; i++) {
    vector<vector<MyStruct>> v1;
    for(size_t j = 0; j < max_j; j++) {
        vector<MyStruct> v2;
        for(size_t k = 0; k < max_k; k++) {
            MyStruct a = {k, 'x', false, nullptr};
            v2.emplace_back(move(a));
        }
        v1.emplace_back(move(v2));
    }
    three_d_struct_v.emplace_back(move(v1));
}

Check out ideone for the whole code. 查看ideone中的完整代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM