1. ホーム
  2. c++

[解決済み] C++におけるベクトルの初期容量

2022-12-01 21:51:50

質問

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

このようにすれば、1回の割り当てで任意のリザーブを持つ配列を作成することが可能になり、例えば std::vector<int> iv; iv.reserve(2345); . 例えば、何らかの事情で size() を 2345 で開始したくないとします。

たとえば、Linux (g++ 4.4.5, kernel 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ベンダー依存なのか?

どのように解決するのですか?

規格では、初期 capacity がどうあるべきかを規定していませんので、実装に頼ることになります。一般的な実装では容量をゼロからスタートさせますが、保証はありません。一方、あなたの戦略である std::vector<int> iv; iv.reserve(2345); の戦略を改善する方法はないので、それで我慢してください。