假设我有一个定义的矩阵:
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_each
和std::transform
。有人可以提出一些建议吗?谢谢!
答案 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