在c++中,在O(1)时间内交换2d数组的行或列
Swap rows or columns of a 2d array in O(1) time in c++
我的问题是,如何在O(1)时间内交换2D数组的两行或两列?,我在网上搜索了一下,发现了一个memcpy函数,但我不知道如何使用它。例如
给定一个矩阵:
1 2 3
4 5 6
7 8 9
如果我们交换第1行和第2行
4 5 6
1 2 3
7 8 9
可以在行和列上使用间接数组。换句话说,要访问元素i,j
,请使用
data[rowix[i]][colix[j]]
而不是普通的
data[i][j]
对于元素访问,这仍然是一个O(1)(尽管有一个更大的常量因子),但也允许您在恒定时间内交换行和列(只交换索引数组元素)。
在C++中
template<int ROWS, int COLS, typename T>
struct Mat2d {
T data[ROWS][COLS];
int colix[COLS], rowix[ROWS];
Mat2d() {
for (int i=0; i<ROWS; i++) {
for (int j=0; j<COLS; j++) {
data[i][j] = T();
}
}
for (int i=0; i<ROWS; i++) rowix[i] = i;
for (int j=0; j<COLS; j++) colix[j] = j;
}
T& operator()(int i, int j) { return data[rowix[i]][colix[j]]; }
T operator()(int i, int j) const { return data[rowix[i]][colix[j]]; }
void swapRows(int i1, int i2) { std::swap(rowix[i1], rowix[i2]); }
void swapCols(int j1, int j2) { std::swap(colix[j1], colix[j2]); }
};
编程中的每个问题都可以通过添加间接级别来解决(除了间接级别太多的问题);-)
相关文章:
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- C++嵌套if语句,基本货币交换
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- shell排序中的交换和比较
- 四边形的 2D 旋转
- 交换函数不是在 C++ 中交换 2D 数组的元素
- 如何将元素的索引从2D数组存储到1D数组中,然后交换这些值
- 在C++中使用 2D 数组进行交换
- 用反向对角线交换2D阵列最小行值
- 在2D数组中交换行的最佳方法
- 如何在 2D 数组 c++ 中交换元素
- 如何使用某些MPI命令(或组合命令)之间在两个处理器之间交换2D数组中存储的数据
- 为什么交换2d数组指针不起作用
- C++查找最小位置,在 2D 数组中进行排序和交换
- 在c++中,在O(1)时间内交换2d数组的行或列
- 如何交换2D阵列的最大和最小成员索引