次の方法で共有


コンテナー (Modern C++)

既定では、C++ の既定の順次コンテナーとして vector を使用します。 これは、他の言語の List<T> と同じです。

vector<string> v;
v.push_back( "Geddy Lee" );

既定の連想コンテナーとしては map (unordered_map ではなく) を使用します。 低次元の場合およびデータの重複を許す場合は、setmultimapmultiset を使用します。

map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";

パフォーマンスの最適化が必要な場合は、次の使用を検討します。

  1. 配列型。(たとえばクラス メンバーとして) 埋め込むことが重要な場合に使用します。

  2. 順序なし連想コンテナー (unordered_map など)。要素ごとのオーバーヘッドが小さく (主な理由)、検索時間が一定です (主な理由になる可能性あり、場合によっては副次的な理由)。 不便でエッジがシャープなため、正しく効率的に使用するのは困難です。

  3. 並べ替えられたベクター。(「アルゴリズム」を参照してください)。

C 言語の配列を使用しないでください (従来の API の場合は、f( vec.data(), vec.size() ); を使用します)。

コンテナーに関する他のトピックについては、「STL コンテナー」を参照してください。

コンテナー サイズ

次の表は、x86 および x64 プラットフォームのコンテナー サイズ (バイト単位) を示しています (この目的では、32 ビット ARM は x86 と同じです)。デバッグ モードには領域と時間を消費するチェック メカニズムが含まれているため、これらの表はリリース モードをカバーしています。Visual C++ 2008 SP1 に関する独立した列では、_SECURE_SCL の既定値が 1 になっています。Visual C++ 2008 SP1 では、速度を最大限に高めるために _SECURE_SCL が手動で 0 に設定されています。Visual Studio 2010 の Visual C++、Visual Studio 2012 の Visual C++、および Visual Studio 2013 の Visual C++ では、_SECURE_SCL の既定値が 0 になっています (現在では、_ITERATOR_DEBUG_LEVEL と呼ばれます)。

x86 コンテナーのサイズ (バイト)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

24

16

16

12

array<int, 5>

20

20

20

20

deque<int>

32

32

24

20

forward_list<int>

なし

なし

8

4

list<int>

28

12

12

8

priority_queue<int>

28

20

20

16

queue<int>

32

32

24

20

stack<int>

32

32

24

20

pair<int, int>

8

8

8

8

tuple<int, int, int>

16

16

16

12

map<int, int>

32

12

16

8

multimap<int, int>

32

12

16

8

set<int>

32

12

16

8

multiset<int>

32

12

16

8

hash_map<int, int>

72

44

44

32

hash_multimap<int, int>

72

44

44

32

hash_set<int>

72

44

44

32

hash_multiset<int>

72

44

44

32

unordered_map<int, int>

72

44

44

32

unordered_multimap<int, int>

72

44

44

32

unordered_set<int>

72

44

44

32

unordered_multiset<int>

72

44

44

32

string

28

28

28

24

wstring

28

28

28

24

x64 コンテナーのサイズ (バイト)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

48

32

32

24

array<int, 5>

20

20

20

20

deque<int>

64

64

48

40

forward_list<int>

なし

なし

16

8

list<int>

56

24

24

16

priority_queue<int>

56

40

40

32

queue<int>

64

64

48

40

stack<int>

64

64

48

40

pair<int, int>

8

8

8

8

tuple<int, int, int>

16

16

16

12

map<int, int>

64

24

32

16

multimap<int, int>

64

24

32

16

set<int>

64

24

32

16

multiset<int>

64

24

32

16

hash_map<int, int>

144

88

88

64

hash_multimap<int, int>

144

88

88

64

hash_set<int>

144

88

88

64

hash_multiset<int>

144

88

88

64

unordered_map<int, int>

144

88

88

64

unordered_multimap<int, int>

144

88

88

64

unordered_set<int>

144

88

88

64

unordered_multiset<int>

144

88

88

64

string

40

40

40

32

wstring

40

40

40

32

参照

その他の技術情報

C++ へようこそ (Modern C++)

C++ 言語リファレンス

C++ 標準ライブラリ リファレンス