12

以前は C を使用していましたが (組み込みのもの)、次のように配列を初期化できます。

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

つまり、イニシャライザ内でインデックスを指定できます。現在、私は を学んQt/C++でいますが、これが C++ でサポートされていないとは信じられません。

私はこのオプションを持っています: -std=gnu++0x、とにかくそれはサポートされていません。(Qt は gcc 4.7.x でバグがあるため、C++11 でサポートされているかどうかはわかりません)

では、C++ では本当にサポートされていないのでしょうか。または、それを有効にする方法がありますか?

UPD:現在、const 配列を初期化したいので、動作しstd::fillません。

4

3 に答える 3

7

うーん、そのタスクには std::fill_n() を使用する必要があります...

ここで述べたようにhttp://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html指定された inits (拡張子) は GNU C++ では実装されていません

編集: ここから取得: C++ のクラス初期化子で const 配列を初期化する

コメントが言ったように、 std:vector を使用して目的の結果を得ることができます。const を別の方法で強制し、fill_n を使用することもできます。

int* a = new int[N];
// fill a

class C {
  const std::vector<int> v;
public:
  C():v(a, a+N) {}
};
于 2012-11-26T10:32:13.093 に答える
3

数年後、たまたまテストしたところg++ -std=c++11、g++ バージョンは 4.8.2 で動作することが確認できました。

于 2015-08-23T14:34:31.687 に答える
2

いいえ、そのように C++ で行うことはできません。ただし、std::fillアルゴリズムを使用して値を割り当てることができます。

int widths[101];
fill(widths, widths+10, 1);
fill(widths+10, widths+100, 2);
fill(widths+100, widths+101, 3);

それほどエレガントではありませんが、機能します。

于 2012-11-26T10:33:14.293 に答える