C++ STLのdeque::resize()関数の使い方と動作を徹底解説
この記事では、C++ STLにおけるdeque(デック)のresize()関数の機能と具体的な使い方について、サンプルコードと実行結果を交えながら詳しく解説します。
deque(両端キュー)とは
dequeは「Double Ended Queue(両端キュー)」の略で、シーケンスコンテナの一種です。先頭と末尾の両端から要素の追加・削除ができる点が最大の特徴です。
通常のキュー(queue)データ構造では、データの挿入は末尾からのみ行い、削除は先頭からのみ行います。バス停の行列をイメージすると分かりやすいでしょう。新しい人は列の末尾に並び、先頭にいる人から順に乗車して列から外れていきます。一方、dequeでは先頭と末尾のどちらからでもデータの挿入・削除が可能なため、より柔軟なデータ管理を実現できます。
deque::resize()関数とは
resize()関数は、dequeのサイズ(要素数)を変更するために使用されるメンバ関数です。動作は以下の通りです。
- 指定したサイズが現在のサイズより大きい場合: 末尾に新しい要素が追加されます。追加される要素は、特に指定しなければデフォルト値(int型なら0など)で初期化されます。
- 指定したサイズが現在のサイズより小さい場合: 末尾から余分な要素が削除されます。
また、第2引数に値を指定することで、新しく追加される要素の初期値を任意に設定することも可能です。
構文
dequename.resize(n); dequename.resize(n, val);
パラメータ
- n: 変更後のdequeのサイズを指定します。
- val(省略可): サイズ拡張時に新しく追加される要素の初期値を指定します。
使用例
例1:サイズを拡張する場合
入力: 現在のサイズ − 5
Deque − 12 13 14 15 16
出力: リサイズ後のサイズ − 7
新しいDeque − 12 13 14 15 16 0 0
例2:サイズを縮小する場合
入力: 現在のサイズ − 5
Deque − F O R C E
出力: リサイズ後のサイズ − 4
新しいDeque − F O R C
処理の手順
- まずdequeを宣言し、初期化します。
- dequeのサイズを確認します。
- dequeの内容を出力します。
- resize()関数を呼び出してサイズを変更します。
- リサイズ後の新しいdequeを出力します。
以上の手順に従うことで、dequeのリサイズを行うことができます。
サンプルコード1:サイズの拡張
// deque resize() 関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
// dequeの初期化
deque<int> d = { 85, 87, 88, 89, 90 };
cout << "Size of deque: " << d.size() << "\n";
// dequeの内容を表示
cout << "Deque: ";
for (auto x = d.begin(); x != d.end(); ++x)
cout << *x << " ";
// resize()関数でサイズを7に変更
d.resize(7);
// リサイズ後のdequeを表示
cout << "\nDeque after resize: " << d.size() << "\n";
cout << "New Deque: ";
for (auto x = d.begin(); x != d.end(); ++x)
cout << *x << " ";
return 0;
}実行結果
Size of deque: 5 Deque: 85 87 88 89 90 Deque after resize: 7 New Deque: 85 87 88 89 90 0 0
サイズを5から7へ拡張したため、末尾にデフォルト値の「0」が2つ追加されていることが分かります。
サンプルコード2:サイズの縮小
// deque resize() 関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
// dequeの初期化
deque<int> d = { 14, 15, 16, 17, 18, 19, 20 };
cout << "Size of deque: " << d.size() << "\n";
// dequeの内容を表示
cout << "Deque: ";
for (auto x = d.begin(); x != d.end(); ++x)
cout << *x << " ";
// resize()関数でサイズを5に変更
d.resize(5);
// リサイズ後のdequeを表示
cout << "\nDeque after resize: " << d.size() << "\n";
cout << "New Deque: ";
for (auto x = d.begin(); x != d.end(); ++x)
cout << *x << " ";
return 0;
}実行結果
Size of deque: 7 Deque: 14 15 16 17 18 19 20 Deque after resize: 5 New Deque: 14 15 16 17 18
サイズを7から5へ縮小したため、末尾の要素「19」と「20」が削除されています。
まとめ
deque::resize()関数を使えば、dequeのサイズを簡単に変更できます。拡張時には末尾に新しい要素が追加され、縮小時には末尾から余分な要素が削除されます。第2引数を指定すれば追加要素の初期値も自由に設定できるため、用途に応じて柔軟に活用しましょう。
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス
-
C++のSTLを使ったDeque(両端キュー)の実装方法を解説
両端キュー(Double Ended Queue、略称:Deque)は、キューの一種であり、先頭(front)と末尾(rear)の両端で要素の挿入・削除が行えるデータ構造です。通常のキューは片側から挿入し反対側から削除するだけですが、dequeは双方向からの操作に対応しているため、より柔軟なデータ管理が可能になります。 C++では、標準テンプレートライブラリ(STL)に <deque> ヘッダとして両端キューが標準搭載されているため、自前で実装しなくても手軽に利用できます。本記事では、STLのdequeを使用したメニュー形式の対話型プログラムを通じて、基本的な使い方を解説します。