[解決済み] 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);
の戦略を改善する方法はないので、それで我慢してください。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】ベクトルからサブベクトルを抽出する最適な方法とは?
-
[解決済み】C++ベクターの要素を合計する方法は?
-
[解決済み] std::vector にある項目が存在するかどうかを調べるには?
-
[解決済み] std::vectorをハードコードされた要素で初期化する最も簡単な方法は何ですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++