2017-06-27 15 views
-4

私はC++を使い慣れていて、次のコード(2次元行列を回転させる)で作業しています。それから、より一般的にするために私のコードにwhileループを追加します。私は、whileコードが何を繰り返すのではないことに気付きました。私はreturn MatrixRotateOutPutを出そうとしましたが、それは不明でした。 whileループの後にreturn 0を追加しようとしましたが、別のエラーが表示されます。 私はこれらの2つのリンク(Link1Link2)もチェックしましたが、本当に役に立たなかったのです。whileループがC++で動作しないとき

ご協力ありがとうございます。

#include<iostream> 
#include<vector> 

using namespace std; 

int MatrixPrint2D(vector<vector<int>> Input) { 
    for (int i = 0; i < Input.size(); i++) { 
     for (int j = 0; j < Input[0].size(); j++) { 
      printf("%d ", Input[i][j]); 
     } 
     printf("\n"); 
    } 
} 


vector<vector<int>> MatrixRotate(vector<vector<int>> Input, int Irritation) { 

    while (Irritation > 0) { 
     cout << Irritation << "\n" << endl; 

     vector<vector<int>> MatrixRotateOutPut(Input[0].size(), vector<int>(Input.size(), 1)); 

     for (int i = 0; i < Input.size(); i++) { 
      for (int j = 0; j < Input[0].size(); j++) { 

       MatrixRotateOutPut[j][Input.size() - 1 - i] = Input[i][j]; 

      } 
     } 
     vector<vector<int>> Input(MatrixRotateOutPut.size(), vector<int>(MatrixRotateOutPut[0].size(), 1)); 
     Input = MatrixRotateOutPut; 

     MatrixPrint2D(MatrixRotateOutPut); 
     printf("\n"); 

     Irritation--; 
     return MatrixRotateOutPut; 

    } 
} 


int main() { 

    //Define a matrix for testing: 
    vector<vector<int>> Matrix2(4, vector<int>(5, 1)); 
    int R = 2; 
    int C = 4; 
    vector<vector<int>> MatrixInput(R, vector<int>(C, 1));; 

    for (int i = 0; i < MatrixInput.size(); i++) { 
     for (int j = 0; j < MatrixInput[0].size(); j++) { 
      int temp; 
      temp = i^(2 * j); 

      MatrixInput[i][j] = temp; 
     } 
    } 

    cout << "MatrixInput:" << endl; 
    MatrixPrint2D(MatrixInput); 
    printf("\n"); 

    vector<vector<int>> OutPut2 = MatrixRotate(MatrixInput, 4); 

    return 0; 
} 

編集:この質問は申し訳ありません。

+1

は明らかに、あなたは、ループ内されなくなりました。ループの後に*を返すことを意味しましたか? – harold

+0

@harold私は出力を得ることができる唯一の方法は、私はループの中に入れて、私はどのようにループの後に戻り、それを動作させる方法を知っていないです – Alex

+1

あなたの行列はループの外で定義する必要があります。その後、ループの外側に戻ることができます。 – drescherjm

答えて

1

は、次の操作を行うことがあります。

  • 移動ループ
  • の外側戻しループの返される変数外の宣言を移動します。

ので:あなたは、ループ内から戻ったとき

vector<vector<int>> MatrixRotate(vector<vector<int>> Input, int Irritation) { 
    vector<vector<int>> MatrixRotateOutPut; 
    while (Irritation > 0) { 
     cout << Irritation << "\n" << endl; 

     MatrixRotateOutPut = vector<vector<int>>(Input[0].size(), vector<int>(Input.size(), 1)); 

     for (int i = 0; i < Input.size(); i++) { 
      for (int j = 0; j < Input[0].size(); j++) { 

       MatrixRotateOutPut[j][Input.size() - 1 - i] = Input[i][j]; 

      } 
     } 
     vector<vector<int>> Input(MatrixRotateOutPut.size(), vector<int>(MatrixRotateOutPut[0].size(), 1)); 
     Input = MatrixRotateOutPut; 

     MatrixPrint2D(MatrixRotateOutPut); 
     printf("\n"); 

     Irritation--; 
    } 
    return MatrixRotateOutPut; 
} 
+0

ありがとう – Alex

関連する問題