如何使用现代c ++转置2d向量?

时间:2018-04-24 09:38:54

标签: c++

假设我有一个定义的矩阵:

vector<vector<T>> matrix;

例如,在转置之前:

{{1, 2},
 {3, 4}}

转置后:

{{1, 3},
 {2, 4}}

根据要求提供朴素的循环解决方案:

    for(i = 0; i < rowSize; ++i){
        for(j = 0; j < colSize; ++j)
        {
            transposed[j][i]=original[i][j];
        }
    }

我想知道在C ++中用现代方法进行转置的原因是什么? 一个天真的解决方案是使用两个for循环,这不是我想要的。我正在考虑使用for_eachstd::transform。有人可以提出一些建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

一如既往,完全取决于您的需求。我能想象的最简单的解决方案是根本不修改数据。相反,您可以提供一个交换索引以进行访问的包装器。不保证完整性或正确性(相当保证不完整,可能有拼写错误,但我希望你能得到这个想法):

template <typename T>
struct transposed_ref {
    T& t;
    transposed_ref(T& t) : t(t) {}
    T::value_type& get(int x,int y) { return T[y][x]; }
};                                         //  ^  ^ --- note: swapped indices