たとえば、その中のすべての要素を入力せずに大きな const 配列を初期化する方法はありますか。
配列を作成しようとしています:
const double A[1000] = {1.0/1, 1.0/2, 1.0/3,...,1.0/1000};
ループで簡単にできます。
本当に const である必要があり、1000 個の異なる値がある場合は、キディ アプリ/スクリプトを作成してヘッダー ファイルとして吐き出し、入力を防止します。これにより、後で必要に応じて配列全体の初期化を簡単に変更できます。
これには、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() を使用して実行することもできます。
const char へのポインターの配列を作成できます。これにより、実行時にnewとループを使用してそれらを初期化できます。
そうでなければ、方法はないと思います。先に進んでヘッダーファイルで手動で初期化するか、const
ステータスを削除することができます。コンパイル時に初期化されていない場合、コンパイラはconst
変数を初期化していないと文句を言います。
これを行う必要がある場合、おそらくこれを行うための小さなプログラムを作成します。
for(i = 1; i <= 1000; i++)
{
printf("1/%d.0, ", i);
if(i % 10 == 0) printf("\n");
}
マクロでこれを行うことができると思いました。それが可能であると確信していますが、今は機能させることができません。うまくいったら戻ってきます。