Упорная копия - мажорный столбец OutputIterator

У меня есть вектор матриц (хранится как основные массивы столбцов), который я хочу объединить по вертикали. Поэтому я хочу использовать функцию копирования из структуры Thrust, как в следующем примере фрагмента:

int offset = 0;
for(int i = 0; i < matrices.size(); ++i) {
    thrust::copy(
        thrust::device_ptr(matrices[i]),
        thrust::device_ptr(matrices[i]) + rows[i] * cols[i],
        thrust::device_ptr(result) + offset
    );

    offset += rows[i] * cols[i];
}

РЕДАКТИРОВАТЬ: расширенный пример:

Проблема в том, что если у меня есть матрица A = [[1, 2, 3], [4, 5, 6]] (2 строки, 3 столбца; в памяти [1, 4, 2, 5, 3, 6 ]) и еще один B = [[7, 8, 9]] (1 строка, 3 столбца; в памяти [7, 8, 9]), результирующая матрица C не [[1, 2, 3], [4 , 5, 6], [7, 8, 9]] (3 строки, 3 столбца; в памяти [1, 4, 7, 2, 5, 8, 3, 6, 9]), но [[1, 5 , 7], [4, 3, 8], [2, 6, 9]] (3 строки, 3 столбца; в памяти [1, 4, 2, 5, 3, 6, 7, 8, 9]).

Есть ли способ создать специальный OutputIterator для этой проблемы (я искал его, но ничего не нашел) или быстрый альтернативный способ?

РЕДАКТИРОВАТЬ: SSCCE

#include 
#include 
#include 
#include 

void printMat2d(thrust::device_vector& mat, int rows, int cols) {
    for(int row = 0; row < rows; ++row) {
        for(int col = 0; col < cols; ++col) {
            std::cout < mat[row + col * rows] < " ";
        }
        std::cout < std::endl;
    }
}

void printMat1d(thrust::device_vector

Ответы на вопрос(1)

Ваш ответ на вопрос