C++vector、2 D vectorのサイズおよびresizeとreserveの違いを指定します.

2202 ワード

前言
vectorはダイナミックな配列で、push_を最もよく使います.back()はvectorに要素を追加します.しかし、vectorが作成された後、下のラベルに従ってvectorの要素にアクセスしたい場合があります.直接v[i]が間違っている場合は、vectorのsizeは0であり、要素はまだありません.vectorを目的のサイズに初期化するにはどうすればいいですか.これはvectorのresizeh関数を使用する必要があります.
resize
まずresizeの関数のプロトタイプを見てみましょう
void resize (size_type n, value_type val = value_type());

resize()の役割はvector内の要素の数を変えることです.
nが現在のvector要素の数より小さい場合、vectorの容量はresizeの最初のパラメータサイズに縮小されます.nです.nを超える要素を除去し、同時に破棄します.nが現在のvector要素の数より大きい場合、vectorの最後に必要な要素の数を拡張します.2番目のパラメータvalが指定されている場合、拡張された新しい要素はvalのコピーに初期化されます.そうしないと、タイプによってデフォルトで初期化されます.注:nが現在のvectorの容量(容量capacityであり、vectorのsizeではない)より大きい場合、自動メモリ割り当てが発生します.したがって、既存のpointer、references、iteratorsは失効します.
1 D vectorのサイズの指定
もし私たちがvector:vector v 1を宣言したら;この場合、v 1[i]を使用して訪問して聞くことはできません.v 1が呼び出された場合.resize(5); v 1の大きさを5に設定すると、v[i]を使って訪ねて聞くことができます.
2 D vectorのサイズの指定
2 D vectorの場合を見てみましょう.
vectorこれは、このときのvecが空であり、vecでもvec[i]のsizeでも0であり、このときvec[i]を取ると下付きの境界が現れるためである.解決策はpush_backの前にvecの長さを定義するvec.resize(5); このときvec[i]を使用することができます.push_back()になりましたがvec[i][j]は依然として下付き境界が現れます.vec[i][j]を使用するには、vecとvec[i]のサイズを同時に指定する必要があります.この場合、一時的な1次元vectorが使用されます.コードは次のとおりです.
vector  > v1;
vector temp(4)
v1.resize(5,temp)

このときのv 1のsizeは5,v 1[i](0)である.
resizeとreserveの違い
まず2つの概念を明らかにしなければなりません.
  • capacity:コンテナが新しいストレージスペースを割り当てる前に格納できる要素の総数を指します.
  • size:現在のコンテナに格納要素の数
  • を指す.
    この2つの概念を明らかにすると、resizeとreserveの違いがわかりやすくなります.
  • reserveはコンテナの予約空間を表しますが、実際にオブジェクトを作成するのではなく、insert()またはpush_を通過する必要があります.back()などでオブジェクトを作成します.resizeは空間を割り当てたり、オブジェクトを作成したりします.
  • reserveはcapacityサイズのみを変更し、sizeサイズは変更しません.resizeはcapacityサイズもsizeサイズも変更します.

  • 両者のパラメータの個数が異なる.
  • resizeは2つのパラメータを持ち、1つはコンテナサイズを表し、1つは初期値(デフォルトは0)
  • を表す.
  • reserveは、コンテナの予約サイズを表すパラメータが1つしかありません.

  • 参考ブログ:
  • c++ vector resize & reserve
  • vectorのresize()についての理解
  • c++ラーニングノート-2 D vectorサイズ
  • を指定