-3

double x[N][N] のような double の 2-dim 配列をすべて -1 に設定する最速の方法は何ですか?

memset を使用しようとしましたが、失敗しました。何か良いアイデアはありますか?

4

7 に答える 7

2

使用: std::fill_nからalgorithm

std::fill_n(*array, sizeof(array) / sizeof (**array), -1 );

例:

double array[10][10];
std::fill_n( *array, sizeof(array) / sizeof (**array), -1.0 );

//Display Matrix
for(auto i=0;i<10;i++)
{
    for(auto j=0;j<10;j++)
        cout<<array[i][j]<< " ";    
    cout<<endl;
}
于 2013-07-29T12:00:25.470 に答える
1

直接設定することもできます

    double x[4][4] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} 

配列インデックスが小さい場合。

于 2013-07-29T12:00:27.843 に答える
1
// create constants
const int rows = 10;
const int columns = 10;

// declare a 2D array
double myArray [rows][columns];

// run a double loop to fill up the array
for (int i = 0; i < rows; i++) 
    for (int k = 0; k < columns; k++)
        myArray[rows][columns] = -1.0;

// print out the results
for (int i = 0; i < rows; i++) {
    for (int k = 0; k < columns; k++)
        cout << myArray[rows][columns];

    cout << endl;
}
于 2013-07-29T12:41:57.537 に答える
0

C++ コンテナを使用すると、fill メソッドを使用できます

array<array<double, 1024>, 1024> matrix;

matrix.fill(-1.0);

何らかの理由で C スタイルの配列に固執する必要がある場合は、最初の行を手動で初期化してから、他の行に memcpy することができます。これは、静的配列として定義したか、行ごとに割り当てたかに関係なく機能します。

const int rows = 1024;
const int cols = 1024;
double matrix[rows][cols]

for ( int i=0; i<cols; ++i)
{ 
    matrix[0][cols] = -1.0;
}
for ( int r=1; r<rows; ++r)
{
    // use the previous row as source to have it cache friendly for large matrices
    memcpy(&(void*)(matrix[row][0]), &(void*)(matrix[row-1][0]), cols*sizeof(double));
}

しかし、私はその種のスタントを行うよりも、C スタイルの配列から C++ コンテナーに移行しようとします。

于 2013-07-29T12:28:11.157 に答える
0

memsetに基づいているため、ここでは使用しないでくださいvoid *。したがって、すべてのバイトは同じです。(float) -10xbf800000( double0xbff0000000000000) なので、すべてのバイトが同じというわけではありません...

手動入力を使用します:

const int m = 1024;
const int n = 1024;
double arr[m][n];
for (size_t i = 0; i < m*n; i++)
    arr[i] = -1;

行列はメモリ内の配列のようなものなので、ループが 1 つある方がわずかに高速です。

または、これを使用できます: std::fill_n(arr, m*n, -1);

どちらが速いかはわかりませんが、どちらも似ています。したがって、おそらくそれを見つけるために小さなテストを行う必要がありますが、私が知る限り、人々は通常どちらかを使用しています。そして、もう1つのことは、最初の1つはC一部のコンパイラでは機能しません.2番目は実際C++には機能せず、決して機能しませんC。したがって、私が思うプログラミング言語で選択する必要があります:)

于 2013-07-29T12:36:57.517 に答える