std::vector
テンプレート引数を使用してテンプレート化されたクラスがあります。引数は、デフォルトで構築可能でない可能性があります。ベクターのサイズを小さくしたい(所定のサイズにカットしたい)。明らかに
vec.resize( reduced_size );
...デフォルトのコンストラクターが必要なため、機能しません。
もちろんできます:
- 使用されている型の既定のコンストラクターを作成します (これは、設計上の適切な選択ではない場合に追加する必要があります)。
- 関数にデフォルト値を渡します(インターフェースの無用な混乱)
- 構築方法をテンプレートに渡します (これも役に立たない混乱)
erase
質問を書いているときに、ベクターから最後まで要素を取得できることに気付きました。
vec.erase ( vec.begin() + position, vec.end() );
...しかし、これが と同じくらい効率的かどうかはわかりませんresize
。
デフォルトのコンストラクターなしでベクターのサイズを縮小する効率的な方法はありますか?
C++11 ソリューションは許容されます。
編集: MSVC と GCC の両方がサイズ変更の縮小を消去呼び出しとして実装しているように見えるため、パフォーマンスに関する質問に答えます。