我试图反转二维数组的每一行并将其存储在一个新的二维数组中。我知道我需要使用临时指针,但我似乎对如何实际执行此操作有点失落。我试过研究这个问题,但找不到我的具体内容。
using namespace std;
void compute(int *p1, int *p2, int ROWS, int COLUMNS);
int main() {
const int COLUMNS = 3;
const int ROWS = 3;
int A[ROWS][COLUMNS] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int B[ROWS][COLUMNS] ;
int *p1, *p2;
p1 = &A[0][0];
p2 = &B[0][0];
compute(p1, p2, ROWS, COLUMNS);
return 0;
}
void compute(int *p1, int *p2, int ROWS, int COLUMNS) {
int *savePtrA, *savePtrB, *temp;
savePtrA = p1;
savePtrB = p2;
temp = p1+COLUMNS;
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLUMNS; j++) {
temp = *p1;
*p2 = *p1 + 1;
p1--;
p2++;
}
}
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLUMNS; ++j) {
cout << setw(5) << *savePtrA;
savePtrA++;
}
cout << setw(10) << " ";
for (int k = 0; k < COLUMNS; ++k) {
cout << setw(5) << *savePtrB;
savePtrB++;
}
cout << setw(10) << " ";
cout << endl;
}
}
答案 0 :(得分:2)
您只需在循环中调用std::reverse_copy:
#include <algorithm>
int main()
{
const int COLUMNS = 3;
const int ROWS = 3;
int A[ROWS][COLUMNS] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int B[ROWS][COLUMNS] ;
for (int i = 0; i < ROWS; ++i)
std::reverse_copy(&A[i][0], &A[i][COLUMNS], &B[i][0]);
}
源数组在前两个参数中给出 - 指向源行中第一个元素的指针,以及指向源行中最后一个元素之后的指针。第三个参数是目标行,它只是指向B
行中第一个元素的指针。
答案 1 :(得分:1)
我不知道你是否正在寻找它,但是改变你的代码以便你做出你所要求的,尽管它可以更简单的方式完成
#include <iostream>
#include <iomanip>
using namespace std;
void compute(int *p1, int *p2, int COLUMNS);
int main() {
const int COLUMNS = 3;
const int ROWS = 3;
int A[ROWS][COLUMNS] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int B[ROWS][COLUMNS] ;
int *p1, *p2, *savePtrA, *savePtrB;
savePtrA = p1;
savePtrB = p2;
for (int i = 0; i < ROWS; ++i) {
p1 = &A[i][0];
p2 = &B[i][0];
compute(p1, p2, COLUMNS);
}
for (int i = 0; i < ROWS; ++i) {
savePtrA = &A[i][0];;
savePtrB = &B[i][0];
for (int j = 0; j < COLUMNS; ++j) {
cout << setw(5) << *savePtrA;
savePtrA++;
}
cout << setw(10) << " ";
for (int k = 0; k < COLUMNS; ++k) {
cout << setw(5) << *savePtrB;
savePtrB++;
}
cout << setw(10) << " ";
cout << endl;
}
return 0;
}
void compute(int *p1, int *p2, int COLUMNS) {
for (int j = COLUMNS-1; j >= 0; j--) {
*p2 = *(p1 + j);
p2++;
}
}