我想交換矩陣中的兩行。我的矩陣是一個分配的固體內存塊。 我有一個指向矩陣行的指針數組。第一個指針指向這個大的分配塊。其他指針指向不同的部分或這個塊。用公用指針交換指向已分配內存的指針
如果我交換任何兩行,除了第一個,它沒關係。但我在第一排有問題。 我想這是因爲指向第一行的指針與其他指針不同。但主要區別是什麼?
#include <iostream>
int** allocateMatrix(int rows, int cols) {
// allocating array of pointers (rows)
int** matrix = new int*[rows];
// allocating one solid block for the whole matrix
matrix[0] = new int[rows*cols];
// setting the pointers for rows
for (int i = 1; i < rows; ++i) {
matrix[i] = matrix[i-1] + cols;
}
// fill the matrix with consecutive numbers
int k = 1;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
matrix[i][j] = k;
k += 1;
}
}
return matrix;
}
void freeMatrix(int** matrix) {
delete[] matrix[0];
delete[] matrix;
}
int main() {
int n = 3;
int m = 3;
int** matrix = allocateMatrix(n, m);
// swap the first and the second line
int* tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
// print matrix (it is printing ok)
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
std::cout << matrix[i][j] << ' ';
}
std::cout << std::endl;
}
// problem is here
freeMatrix(matrix);
return 0;
}
創建一個矩陣類,其中包含一個'vector> data'成員,並實現一個交換函數,該函數在數據變量或其某行上調用'std :: swap'。 –
2014-09-28 16:41:17