あなたは1
が存在するかどうかを確認するために、行のすべての列を反復を持つことになります。
サンプルコード:
for (int row = xa; row < 50; row++) {
int bIsOne = 0;
for (int i = 0;i < col_size && !bIsOne; i++) {
bIsOne = bIsOne | schemaArray[row][i];
}
if(bIsOne)
printf("1 found in row %d\n",row);
}
あなたはschemaArray
のビットマップを構築しない限り、これはビット単位の演算子を使用して行うことはできません。その場合、一度に行全体をチェックすることができます。
これは大部分が過剰です。あなたのコードが性能重視の場合にのみ実行してください。
前処理ステップ:
for (int i = 0; i < row_count; i++) {
if(bitMapSchemaArray[i])
printf("There is a 1 in %d row\n", i+1);
}
しかし、ほとんどで、あなたが持っていることができるようになります:あなたの関数ではschemaArray
long long bitMapSchemaArray[ROW_SIZE];
for (int i = 0; i < row_count; i++) {
long long columnBitMap = 0;
for (int j = 0; j < col_count; j++) {
columnBitMap <<= 1; // Multiplies by 2
columnBitMap = columnBitMap | schemaArray[i][j]; // Add a 1 if schemaArray[i][j]=1 else 0
}
bitMapSchemaArray[i] = columnBitMap;
}
のビットマップ配列を構築し、あなたがして、ビットマップを使用することができます64ビット整数の配列を使用すると仮定すると、2-D
配列の64列。もちろん、これを外挿して、ceil(column_count)/64
の64ビット整数を使用することで、64列以上の値を得ることもできます。その場合、累積結果が依然としてゼロでないかどうかをビットごとにORでチェックします。
を見つける(| schemaArray [行] == 1)'条件はありませんコンパイル。しかし、それを正しく使う方法は教えてくれません。 –