【C++】vector等のコンテナのサイズを変更する.resize()の使い方

目次

はじめに

C++のstd::vectorstd::listなどのコンテナを扱っていると、「要素数を後から増やしたい」「逆に、末尾の要素を削除してサイズを縮小したい」という場面があります。

このような、コンテナの**要素数(.size())**を直接変更するのが .resize() メンバ関数です。.resize() を使うと、コンテナを指定したサイズに拡張、または縮小することができます。

この記事では、.resize() の基本的な使い方と、コンテナを拡張する際に新しい要素がどのように初期化されるかについて解説します。


.resize() を使ったサンプルコード

このコードは、vector を作成し、.resize() を使ってサイズを拡張、および縮小する一連の流れを示します。

完成コード

#include <iostream>
#include <vector>
#include <string>

using namespace std;

// vectorの内容を表示するヘルパー関数
void print_vector(const string& title, const vector<int>& vec) {
    cout << title << " (size=" << vec.size() << "): { ";
    for (int val : vec) {
        cout << val << " ";
    }
    cout << "}" << endl;
}

int main() {
    vector<int> numbers = {10, 20, 30};
    
    print_vector("初期状態", numbers);

    // 1. 現在より大きいサイズに拡張 (値の指定なし)
    numbers.resize(5);
    print_vector("拡張後 (値なし)", numbers);

    // 2. 現在より大きいサイズに拡張 (値の指定あり)
    numbers.resize(8, 99);
    print_vector("拡張後 (値あり)", numbers);
    
    // 3. 現在より小さいサイズに縮小
    numbers.resize(4);
    print_vector("縮小後", numbers);
    
    return 0;
}

実行結果

初期状態 (size=3): { 10 20 30 }
拡張後 (値なし) (size=5): { 10 20 30 0 0 }
拡張後 (値あり) (size=8): { 10 20 30 0 0 99 99 99 }
縮小後 (size=4): { 10 20 30 0 }

コードの解説

1. コンテナの拡張

numbers.resize(5);

  • 機能: コンテナの現在のサイズ (3) よりも大きいサイズ (5) を指定すると、コンテナは指定されたサイズになるまで末尾に新しい要素を追加します。
  • 初期化: このとき、追加される新しい要素は値初期化されます。int型の場合は 0 になります。

numbers.resize(8, 99);

  • 機能: .resize() の第2引数に値を指定すると、拡張時に追加される新しい要素は、その指定された値で初期化されます。
  • 99: この例では、追加された3つの要素が 99 で埋められています。

2. コンテナの縮小

numbers.resize(4);

  • 機能: コンテナの現在のサイズ (8) よりも小さいサイズ (4) を指定すると、末尾の要素が削除され、コンテナは指定されたサイズに縮小されます。
  • この例では、後ろの4つの要素が削除され、先頭の4つの要素 {10, 20, 30, 0} だけが残ります。

まとめ

今回は、C++のコンテナのサイズを動的に変更する .resize() メソッドについて解説しました。

  • .resize(新しいサイズ): コンテナの要素数を変更する。
    • サイズを大きくすると、新しい要素が値初期化intなら0)される。
    • サイズを小さくすると、末尾の要素が削除される。
  • .resize(新しいサイズ, 値): サイズを大きくする際に、追加する要素を指定した値で初期化する。

.push_back().pop_back() で一つずつ要素を操作するのとは異なり、.resize() はコンテナのサイズを直接、目標の数に合わせたい場合に非常に便利なツールです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次