17

たとえば、乱数generate_nを作成するようなものを使用することは可能ですか?コンストラクターで割り当てconst vectorを導出して実行せずにそれを行う方法を考えることはできませんでした。vector

4

3 に答える 3

26

必要に応じて、静的ヘルパーまたはラムダを使用してください。コメントで指摘されている移動セマンティクス/コピー省略は、すべてのまともなコンパイラがヘルパーによって返されたベクトルの完全なコピーを省略するため、これをかなり安価にします。代わりに、単一のベクトルを埋めるコードを作成し、そのベクトルを使用するだけです。

std::vector< int > Helper()
{
  const size_t n = 10;
  std::vector< int > x( n );
  std::generate_n( x.begin(), n, someGenerator );
  return x; 
}

const std::vector< int > my_const_vec( Helper() );

ここにラムダバージョンがあります:

const std::vector< int > my_const_vec( [] ()
  {
    const size_t n = 10;
    std::vector< int > x( n );
    std::generate_n( x.begin(), n, someGenerator );
    return x; 
  }() );
于 2013-03-05T09:33:23.793 に答える
0

初期化を関数にカプセル化し、それを「constexpr」と宣言して、それを使用して const 式を初期化できるようにします。

于 2013-03-06T12:26:30.710 に答える