2

重複の可能性:
C++ で配列を使用するにはどうすればよいですか?

配列を配列にコピーするのに問題がありました。ポインターの使用が原因である可能性があると感じていますが、間違っている場合は修正してください。

私の機能は次のとおりです。

bool sodoku::rowTest(sodoku *arr[9][9])
{
  int row = 0;
  while(row < 9)
  {
    for(int j = 0; j < 9; j++)
    {
      for(int k = 0; k < 9; k++)
      {
        if(arr[row][j]->number  == arr[row][j]->possibleNumbers[k])
        {
          for(int i = 0; i < 9; i++)
          {
            arr[row][i]->possibleNumbers[k] = 0;
          }
        }
          for(int g = 0; g < 7; g++)
          {
           int t = 8;
           arr[row][g]->possibleNumbers[k] = arr[row][t]->possibleNumbers[k]; 
          }
          cout << "arr row j num : " << arr[row][j]->possibleNumbers[k] << "row: " << row << " column: " << j << endl;
      }
    }
  row++;
  }
  if(row == 9)
    return true;
  }
return true;
}

私の小さな問題のセクションはここにあります:

          for(int g = 0; g < 7; g++)
          {
           arr[row][g]->possibleNumbers[k] = arr[row][8]->possibleNumbers[k]; 
          }

各要素をカウントすると、何らかの理由でコピーが行われません。なぜこれが起こるのかを知るために誰かが私を助けることができますか? arr[row][1]->possibleNumbers[k] から arr[row][7]->possibleNumbers[k] までのすべての配列が arr[row][8]->possibleNumbers[k] と同じ値を持つようにしたいだけです]。それが役立つ場合、PossibleNumbers の範囲は 0 から 9 です。

誰かがそれを助けることができれば、それは素晴らしいことです.

ありがとう。

4

1 に答える 1

3

配列変数はコピーされませんが、std::copy を使用できます。

また、配列を値で渡すと、配列の減衰が発生します。これは、 の左辺値T(&)[N]実際には として渡されることを意味しT*ます。これを防ぐには、代わりに参照渡しを行います。

これを行う一般的なヘルパー関数を次に示します。

#include <algorithm>

template <typename T, int N>
void copy(T(&dest)[N], T(&src)[N])
{
    std::copy(dest, dest+N, src);
}

今、あなたはただ言うことができます

char dest[5];
char src [5];
copy(dest, src); // provided same element type and size

また、メンバー配列コピーされることに注意してください

struct SudokuRow
{
    unsigned char cells[9];
};

SudokuRow a, b;
a = b; // copies just fine
于 2012-10-16T10:46:18.513 に答える