在二维数组C ++中反转一行

时间:2017-05-02 17:06:41

标签: c++ arrays

我试图反转二维数组的每一行并将其存储在一个新的二维数组中。我知道我需要使用临时指针,但我似乎对如何实际执行此操作有点失落。我试过研究这个问题,但找不到我的具体内容。

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;
  }

}

2 个答案:

答案 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]);
}

Live Example

源数组在前两个参数中给出 - 指向源行中第一个元素的指针,以及指向源行中最后一个元素之后的指针。第三个参数是目标行,它只是指向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++;
    }
}