我正在寻找一种优雅的方法来使用STL算法优先旋转矢量矢量或提升样本数据看起来像这样
vector<vector<int> > vm;
vector<int> v;
v.push_back(1);
v.push_back(2);
vm.push_back(v);
v.clear();
v.push_back(3);
v.push_back(4);
vm.push_back(v);
v.clear();
v.push_back(5);
v.push_back(6);
vm.push_back(v);
1 2
3 4
5 6
Run Code Online (Sandbox Code Playgroud)
我想得到一个像这样的int矢量向量
1 3 5
2 4 6
Run Code Online (Sandbox Code Playgroud)
我想最简单的解决方案就是编写一个transpose带有两个循环的简单函数:
std::vector<std::vector<int> > transpose(const std::vector<std::vector<int> > data) {
// this assumes that all inner vectors have the same size and
// allocates space for the complete result in advance
std::vector<std::vector<int> > result(data[0].size(),
std::vector<int>(data.size()));
for (std::vector<int>::size_type i = 0; i < data[0].size(); i++)
for (std::vector<int>::size_type j = 0; j < data.size(); j++) {
result[i][j] = data[j][i];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
应该足够容易地优化返回值.我认为使用任何标准功能都不会更简单或更有效,但我可能错了.
另一种方法是将所有数据存储在一个单元中vector,然后i, j使用i*row_length + j或类似的方式计算元素的位置.这样,转置不涉及数据复制,而只是改变索引的计算.
| 归档时间: |
|
| 查看次数: |
4386 次 |
| 最近记录: |