私は単一の.h
ファイルと複数の.cpp
ファイルを持つプロジェクトを持っています。ヘッダファイルには、現在ソートを実装しているネームスペースUF
(u seful fの略語)が含まれています。これは、このようUF.cpp
で定義された比較器を有することによって行われるqsortを実装するグローバル変数を避ける方法はありますか
:現在
int compar_int_asc(const void *a, const void *b)
{
int aa = *((int *)a), bb = *((int *)b);
if (base_arr_int[aa] < base_arr_int[bb])
return -1;
if (base_arr_int[aa] == base_arr_int[bb])
return 0;
if (base_arr_int[aa] > base_arr_int[bb])
return 1;
}
を、上記qsort
とコンパレータ機能によってアクセスする必要があるベース・アレイbase_arr_int
はmain.cpp
で宣言され、UF.cpp
にexternedれます。
qsort
私は別のクラスSEP
にアクセスします。まず、SEP.cpp
では、私はextern base_arr_int
です。次にratios[100]
が整数で、SEP
にローカルでローカルな場合は、SEP.cpp
の中で次のようにします。
base_arr_int = ratios;
qsort(indices, 100, sizeof(int), UF::compar_int_asc);
これは複数のクラスでqsortを実装する最善の方法ですか?
特に、私は可能な限りmain.cpp
で定義されたグローバル変数の使用を避けたいと考えています。代替デザインはありますか?
あなたは 'のstdを検討したいと思います:: 'qsort'ではなく' sort'ですか? –
@NickyCはい、main.cppのグローバル変数を避けるのに役立ちます。また、 'ratios'配列そのものをソートするのではなく、' ratios [indices [0]]が最小の要素である 'ratios [indices [1]]'に。 'std :: sort'はその機能に役立ちますか? – Tryer