3D Вектор структуры emplace_back

Это не работает И причина почему загадочна для меня.

PS: использование C ++ 11

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;
}

0

Решение

Вот, three_d_struct_v имеет тип vector<vector<vector<MyStruct>>>то есть vector из vector<vector<MyStruct>>, так что вам нужно добавить элемент типа vector<vector<MyStruct>> (аналогично для вложенных размеров). Однако в вашем коде вы добавляете элемент типа MyStruct непосредственно.

Вам нужно изменить что-то вроде:

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));
}

Проверять, выписываться ideone для всего кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]