행렬에서 두 행을 교환하고 싶습니다. 내 행렬은 할당 된 솔리드 블록 메모리입니다. 행렬의 행을 가리키는 포인터 배열이 있습니다. 첫 번째 포인터는이 큰 할당 블록을 가리 킵니다. 다른 포인터는 다른 부분이나이 블록을 가리 킵니다.공통 포인터를 사용하여 할당 된 메모리로 포인터 바꾸기
첫 번째 행을 제외하고 두 행을 서로 바꿔도 괜찮습니다. 하지만 첫 번째 행에 문제가 있습니다. 첫 번째 행의 포인터가 다른 포인터와 다르기 때문입니다. 그러나 주요 차이점은 무엇입니까?
#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;
}
'벡터> 데이터'멤버를 포함하는 매트릭스 클래스를 만들고 데이터 변수 또는 그 행 중 하나에'std :: swap'을 호출하는 스왑 함수를 구현하십시오. –