gpt4 book ai didi

C++ 二维 vector 按列搜索

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:08 26 4
gpt4 key购买 nike

我有这样的二维 vector :vector<vector<int>> .我正在使用迭代器按行遍历它,但是按列遍历它的最佳做法是什么?

这是我用于按行迭代的代码:

vector<vector<int>> vMatrix (4, vector<int>(4));
vector<vector<int>>::iterator itRow;
vector<int>::iterator itCol;

for (itRow = vMatrix.begin(); itRow != vMatrix.end(); itRow++)
{
for (itCol = itRow->begin(); itCol != itRow->end(); itCol++)
{
// do some stuff
}
}

亲切的问候,米伦维切夫

最佳答案

我认为一种方法是通过矩阵的转置:

std::vector<std::vector<int>> transpose(const std::vector<std::vector<int>> &m)
{
using std::vector;

vector<vector<int>> result(m[0].size(), vector<int>(m.size()));

for (vector<int>::size_type i(0); i < m[0].size(); ++i)
for (vector<int>::size_type j(0); j < m.size(); ++j)
result[i][j] = m[j][i];

return result;
}

std::vector<std::vector<int>>::iterator itCol;
std::vector<int>::iterator itRow;
std::vector<std::vector<int>> t(transpose(vMatrix));

for (itRow = t.begin(); itRow != t.end(); itRow++)
for (itCol = itRow->begin(); itCol != itRow->end(); itCol++)
{
// ...
}

循环体内无需更改任何内容,但速度很慢。

修改 transpose 以返回矩阵转置的“ View ”可以获得一些速度:

std::vector<std::vector<int *>> transpose(const std::vector<std::vector<int>> &)

无论如何,即使是这种解决方案也比通过 operator[] 访问元素要慢。

如果代码重构是一个选项,一个好的解决方案可能是从 vector 的 vector 更改为一维 vector 以获得更好的代码局部性(类似于 https://stackoverflow.com/a/15799557/3235496 )。

关于C++ 二维 vector 按列搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23949642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com