50 {
51 if (jagged_3d.empty())
52 return {};
53
54
55 size_t max_rows = 0, max_cols = 0;
56 for (const auto& matrix : jagged_3d) {
57 max_rows = std::max(max_rows, matrix.size());
58 for (const auto& row : matrix) {
59 max_cols = std::max(max_cols, row.size());
60 }
61 }
62
63
64 std::vector<std::vector<std::vector<U>>> normalized;
65 normalized.reserve(jagged_3d.size());
66
67 for (const auto& matrix : jagged_3d) {
68 std::vector<std::vector<U>> norm_matrix;
69 norm_matrix.reserve(max_rows);
70
71 for (const auto& row : matrix) {
72 std::vector<U> norm_row = row;
73 norm_row.resize(max_cols, U{});
74 norm_matrix.push_back(std::move(norm_row));
75 }
76
77 while (norm_matrix.size() < max_rows) {
78 norm_matrix.push_back(std::vector<U>(max_cols));
79 }
80
81 normalized.push_back(std::move(norm_matrix));
82 }
83
84 return normalized;
85 }