【C++学習|初心者向け】C++初心者必見!std::vectorのサイズを自由自在に操る「resize」の使い方

1. 導入: なぜresizeが必要なのか?

C++で配列を扱う際、あらかじめ要素数が決まっていない場面はよくあります。例えば、ユーザーの入力数に応じてデータを格納したり、処理の途中で必要なメモリ領域を確保したりする場合です。そんな時、std::vectorのresizeを使うことで、動的にコンテナのサイズを変更し、効率的にメモリを管理できるようになります。これを知ることで、メモリ不足のエラーを防ぎ、柔軟なプログラムが書けるようになります。

2. 基礎知識: resizeとreserveの違い

初心者の方が混同しやすいのが、resizereserveの違いです。
resizeは「要素数そのものを変更する」命令です。例えば、サイズ3のvectorをサイズ10にresizeすれば、新しい要素が7つ追加されます。
一方でreserveは「あらかじめメモリを確保しておく」だけで、要素数は変わりません。
resizeを行った場合、新しく増えた要素には「デフォルト値(数値型なら0)」が自動的に代入されます。これがresizeの最大の特徴です。

3. 実装/解決策: resizeの基本操作

resizeは、現在より大きいサイズを指定すれば要素が増え、小さいサイズを指定すれば末尾から要素が切り捨てられます。
また、resizeの第2引数を指定することで、増えた要素を0以外の好きな値で初期化することも可能です。

4. サンプルプログラム

以下のコードをコピーして、実際に動作を確認してみてください。

include
include

int main() {
// 初期サイズ3でvectorを作成(中身: 1, 2, 3)
std::vector v = {1, 2, 3};

// 1. サイズを5に増やす
// 新しく増えた2つの要素はデフォルト値の「0」で埋められます
v.resize(5);

// 2. サイズを7に増やし、かつ増えた要素を「99」で初期化する
v.resize(7, 99);

// 結果を表示
std::cout << "現在の要素: "; for (int n : v) { std::cout << n << " "; } std::cout << std::endl; // 3. サイズを2に減らす(末尾の要素が削除されます) v.resize(2); std::cout << "サイズを2に減らした後のサイズ: " << v.size() << std::endl; return 0; }

5. 応用・注意点: パフォーマンスへの配慮

resizeは便利な反面、頻繁に呼び出しすぎるとパフォーマンスの低下を招くことがあります。特に、ループの中で毎回resizeを呼び出すようなコードは非効率です。
もし事前に必要な最大数が分かっている場合は、あらかじめ大きめのサイズを確保しておくか、reserveを使ってメモリを先に確保してからpush_backを行う方が、実行速度が速くなることが多いです。
また、要素を減らすresizeを行っても、vectorが内部で持っているメモリ容量(capacity)はすぐには解放されないという点も、メモリ管理の観点から覚えておくと良いでしょう。

コメント

タイトルとURLをコピーしました