C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのdeque::shrink_to_fit()関数の使い方を徹底解説

本記事では、C++ STLで提供されているdeque::shrink_to_fit()関数について、その仕組み・構文・具体的なコード例を交えながら詳しく解説します。

deque(両端キュー)とは?

deque(Double Ended Queue:両端キュー)は、シーケンスコンテナの一種で、コンテナの両端(先頭と末尾)のどちらからでも要素の挿入・削除を行えるデータ構造です。

通常のキュー(queue)では、要素を追加できるのは末尾のみ、削除できるのは先頭のみという制限があります。バス停の行列を思い浮かべると分かりやすいでしょう。新しく来た人は列の最後尾に並び、乗車するのは列の先頭にいる人から順番に行われます。

これに対してdequeでは、挿入も削除も両端のどちらでも自由に行えるため、より柔軟なデータ操作が可能になっています。

deque::shrink_to_fit()とは?

deque::shrink_to_fit()は、C++ STLに標準で組み込まれている関数で、<deque>ヘッダーファイル内で宣言されています。

この関数は、dequeコンテナが確保しているメモリ容量を実際の要素数に合わせて縮小し、余分なメモリ領域を解放するよう要求します。コンテナのサイズが想定を超えてしまっている場合や、メモリ使用量を抑えたい場合などに非常に便利な機能です。

構文

mydeque.shrink_to_fit();

この関数は引数を受け取りません。

戻り値

この関数には戻り値がありません(void型です)。なお、shrink_to_fit()による容量の縮小はあくまで「要求」であり、処理系によっては必ずしもメモリが解放されるとは限らない点に注意してください。

使用例1:resize()との組み合わせ

#include <bits/stdc++.h>
using namespace std;

int main(){
    deque<int> Deque(50);
    cout << "初期のDequeのサイズ : " << Deque.size();
    Deque.resize(40);
    cout << "\nリサイズ後のDequeのサイズ : " << Deque.size() << endl;
    Deque.shrink_to_fit();
    return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます。

初期のDequeのサイズ : 50
リサイズ後のDequeのサイズ : 40

使用例2:要素へのアクセスとリサイズ

#include <bits/stdc++.h>
using namespace std;

int main(){
    deque<int> Deque(10);
    for (int i = 0; i <= 5; i++)
        Deque[i] = i;
    cout << "初期のDequeのサイズ : " << Deque.size();
    cout << "\nDequeの要素 : ";
    for (int i = 0; i <= 7; i++)
        cout << Deque[i] << " ";
    Deque.resize(10);
    cout << "\nリサイズ後のDequeのサイズ : " << Deque.size();
    cout << "\nDequeの要素 : ";
    for (int i = 0; i < 10; i++)
        cout << Deque[i] << " ";
    Deque.shrink_to_fit();
    return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます。

初期のDequeのサイズ : 10
Dequeの要素 : 0 1 2 3 4 5 0 0
リサイズ後のDequeのサイズ : 10
Dequeの要素 : 0 1 2 3 4 5 0 0 0 0

まとめ

deque::shrink_to_fit()は、dequeコンテナの余分なメモリ容量を削減するための関数です。resize()でコンテナを縮小した後に呼び出すことで、実際の要素数に見合ったメモリ使用量へと最適化できます。メモリ効率を意識したプログラムを作成する際に、ぜひ活用してみてください。

  1. C++ STLのdeque::resize()関数の使い方と動作を徹底解説

    この記事では、C++ STLにおけるdeque(デック)のresize()関数の機能と具体的な使い方について、サンプルコードと実行結果を交えながら詳しく解説します。deque(両端キュー)とはdequeは「Double Ended Queue(両端キュー)」の略で、シーケンスコンテナの一種です。先頭と末尾の両端から要素の追加・削除ができる点が最大の特徴です。通常のキュー(queue)データ構造では、データの挿入は末尾からのみ行い、削除は先頭からのみ行います。バス停の行列をイメージすると分かりやすいでしょう。新しい人は列の末尾に並び、先頭にいる人から順に乗車して列から外れていきます。一方、deq

  2. C++ STLのdeque::assign()関数の使い方を徹底解説

    本記事では、C++ STLにおける deque::assign() 関数の動作について詳しく解説します。デック(deque)は「double ended queue(両端キュー)」と呼ばれるデータ構造で、先頭と末尾の両方から要素の挿入・削除が可能なコンテナです。C++の deque::assign() は組み込み関数の一つで、dequeコンテナに新しい値を割り当てるために使用されます。この関数が呼び出されるたびに、既存の要素をすべて置き換えて新しい値を設定し、それに応じてコンテナのサイズも自動的に調整されます。構文deque::assign() の構文は以下の通りです。dequename.as