2

私はサイズのベクトルを持っているとしましょう 4:

vector <double> example;
example.push_back(3.0); 
example.push_back(10.1);
example.push_back(33.1);
example.push_back(23.3);

[3 10.1 33.1 23.3];

正方行列を持っていることがわかっている場合 (つまり、サイズは 4、9、16、25、36、49 のみにすることができます...)

C ++の列数と同じ行数を知るにはどうすればよいですか??

だから私はやっている

int size, col, row;
size = example.size();

row = col = sqrt(size);

他にもっと速い方法はありますか??

4

1 に答える 1

2

連続した場所として割り当てられた 2 次元配列はvector、 のvectorや の配列よりも高速ですvector。ベクトルには、ベクトルにアクセスするために関数を呼び出す必要があるという点で、わずかな欠点があります (ただし、コンパイラはこれらを最適化する可能性があります)。

例えば:

enum {MATRIX_SIZE = 4};

// Define a square matrix of integers
int matrix[MATRIX_SIZE * MATRIX_SIZE];

// Set value at row: 3, column 2 to 64:
unsigned int row = 3;
unsigned int column = 2;
matrix[row * MATRIX_SIZE + column] = 64;

ベクトルの使用にはわずかなオーバーヘッドがあります。

答えるべき問題は、配列とベクトルのパフォーマンスの違いに価値があるかどうかです。 メンテナンスと開発に費やす時間は、パフォーマンスのメリットを上回る場合があります (つまり、遅くても正しくリリースされたアプリケーションは、市場や消費者にリリースされるのがはるかに遅い高速なアプリケーションよりも価値がある場合があります)。

于 2011-07-14T16:59:19.023 に答える