106

デフォルトのコンストラクターを使用して作成されたcapacity()のは何ですか? std::vectorがゼロであることはわかっていsize()ます。デフォルトで構築されたベクトルは、ヒープ メモリ割り当てを呼び出さないと言えますか?

このようにして、単一の割り当てを使用して、任意の予約で配列を作成することができますstd::vector<int> iv; iv.reserve(2345);. size()何らかの理由で、 2345 でを開始したくないとしましょう。

たとえば、Linux (g++ 4.4.5、カーネル 2.6.32 amd64) の場合

#include <iostream>
#include <vector>

int main()
{
  using namespace std;
  cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl;
  return 0;
}

プリント0,10。それはルールですか、それとも STL ベンダー依存ですか?

4

6 に答える 6

78

標準capacityでは、コンテナのイニシャルがどうあるべきかを指定していないため、実装に依存しています。一般的な実装では、容量はゼロから開始されますが、保証はありません。一方、あなたの戦略を改善する方法はありませんstd::vector<int> iv; iv.reserve(2345);ので、それに固執してください.

于 2012-09-04T20:44:55.990 に答える