4

たとえば、その中のすべての要素を入力せずに大きな const 配列を初期化する方法はありますか。

配列を作成しようとしています:

const double A[1000] = {1.0/1, 1.0/2, 1.0/3,...,1.0/1000};

ループで簡単にできます。

4

4 に答える 4

4

本当に const である必要があり、1000 個の異なる値がある場合は、キディ アプリ/スクリプトを作成してヘッダー ファイルとして吐き出し、入力を防止します。これにより、後で必要に応じて配列全体の初期化を簡単に変更できます。

于 2013-01-23T10:53:44.583 に答える
3

これには、boost のプリプロセッサ ライブラリを使用できます。

あなたのメインファイル:

#include <boost/preprocessor.hpp>


const double A[1000] = {
#define BOOST_PP_ITERATION_LIMITS (0, 9)
#define BOOST_PP_FILENAME_1 "toplevel.hpp"
#include BOOST_PP_ITERATE()
};

ファイル"toplevel.hpp":

#define ENUMERATE(z, i, data) 1.0 / (BOOST_PP_ITERATION() * 100 + i)

BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(100, ENUMERATE, %%)

#undef ENUMERATE

「toplevel.hpp」を 10 回続けてインクルードしBOOST_PP_ITERATION()、各反復で 0、1、.. 9 に展開します (0 と 9 は から来ますBOOST_PP_ITERATION_LIMITS)。

BOOST_PP_COMMA_IF()引数がゼロ以外の場合、コンマが生成されます。

BOOST_PP_ENUM()マクロ (ENUMERATEこの場合) を 100 回展開し、 i(引数 に基づいて100) 0 から 99 の値を取得します。

編集

説明を追加し、余分な を削除しましBOOST_PP_OR()た。

編集2

boost::preprocessor のほとんどの反復スキームは max. 256回の繰り返し(さまざまなBOOST_PP_LIMIT_*マクロに保存されている)。

ファイルの繰り返しなしで、ネストされた BOOST_PP_ENUM() を使用して実行することもできます。

于 2013-01-23T11:10:39.730 に答える
1

const char へのポインターの配列を作成できます。これにより、実行時にnewとループを使用してそれらを初期化できます。

そうでなければ、方法はないと思います。先に進んでヘッダーファイルで手動で初期化するか、constステータスを削除することができます。コンパイル時に初期化されていない場合、コンパイラはconst変数を初期化していないと文句を言います。

于 2013-01-23T10:50:47.413 に答える
1

これを行う必要がある場合、おそらくこれを行うための小さなプログラムを作成します。

for(i = 1; i <= 1000; i++)
{ 
    printf("1/%d.0, ", i);
    if(i % 10 == 0) printf("\n");
}

マクロでこれを行うことができると思いました。それが可能であると確信していますが、今は機能させることができません。うまくいったら戻ってきます。

于 2013-01-23T11:11:56.753 に答える