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

【C++ STL】forward_listのmax_size()関数の使い方と実例解説

本記事では、C++ STLにおける forward_listmax_size() 関数の動作について、具体的なコード例を交えながら解説します。

forward_list(前方リスト)とは?

forward_list は、単方向連結リストとして理解できます。要素を辿れるのは前方向のみで、後ろ方向へは移動できません。一方、list(双方向連結リスト)では各要素が「次の要素へのリンク」と「前の要素へのリンク」の2つのリンクを持っているため、双方向に要素を辿ることが可能です。

forward_list は前方へのリンクを1つだけ保持すればよいため、その分メモリ消費が少なく高速に動作します。また、要素の挿入・削除も定数時間 O(1) で行えるという特徴があります。

forward_list::max_size() 関数とは?

forward_list::max_size() は、C++標準テンプレートライブラリ(STL)に含まれる関数の一つで、その forward_list がシステム上で格納できる最大の要素数を返します。この値は、使用している環境やメモリの制約によって異なります。

構文

forwardlist_name.max_size()

引数(パラメータ)

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

戻り値

この関数は、その forward_list が理論上保持できる最大要素数(size_type 型)を返します。実際に現在格納されている要素数を知りたい場合は、別途 size()distance() を使用する必要がある点に注意してください。

プログラムの流れ

  • まず、forward_list を初期化します。

  • 必要に応じて assign() 関数などを使って要素を追加します。

  • C++のヘッダファイルで定義されている max_size() 関数を呼び出します。

  • 取得した最大サイズを画面に出力して確認します。

サンプルコード①:要素追加後のmax_size()を確認する

/*
以下のコードでは、forward_listを作成し、要素を挿入しています。
その後、max_size()関数を使用して、このforward_listが保持できる最大サイズを確認します。
*/

#include <bits/stdc++.h>
using namespace std;
int main() {
   // forward_listの作成
   forward_list<int> myForwardList;
   // forward_listに値を追加
   myForwardList.assign(3, 2);
   cout << "The elements in my forward list are : ";
   for (auto i=myForwardList.begin(); i!=myForwardList.end();i++)
      cout << *i << " ";
   cout << "\nThe size of my Forward List is: " << myForwardList.max_size();
   return 0;
}

出力結果

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

The elements in my forward list are : 2 2 2
The size of my Forward List is:
1152921504606846975

サンプルコード②:空のforward_listのmax_size()を確認する

/*
以下のコードでは、空のforward_listを作成しています。
max_size()関数を使用して、その最大サイズを確認します。
*/

#include <bits/stdc++.h>
using namespace std;
int main() {
   // forward_listの作成
   forward_list<int> myForwardList;
   cout << "\nsize of my forward list is: "<<myForwardList.max_size();
   return 0;
}

出力結果

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

size of my forward list is: 1152921504606846975

まとめ

max_size() が返す値は、実際の現在の要素数ではなく、あくまで「理論上格納できる最大要素数」である点に注意しましょう。この値は実行環境やコンパイラによって異なり、64ビット環境では非常に大きな数値が表示されるのが一般的です。要素数の上限を事前に把握したい場合などに活用できる便利な関数です。

  1. C++ STLのforward_list assign()関数の使い方を徹底解説

    本記事では、C++におけるforward_listのassign()関数の動作について詳しく解説します。forward_listとはforward_listは、通常のリスト(std::list)と異なり、次の要素とのリンクのみを保持するコンテナです。通常のリストは前後両方向の要素とリンクしているため、前方・後方のどちらの方向にも反復処理が可能ですが、forward_listは前方方向にしか反復できません。その代わり、メモリ使用量が少なく、軽量な動作が特徴です。assign()関数とはforward_list::assign()関数は、C++標準テンプレートライブラリ(STL)の一部です。この関

  2. 【C++ STL】配列のdata()メソッドの使い方を例付きで解説

    配列とは配列とは、同じデータ型の要素を連続したメモリ領域に格納したコレクションのことです。C++標準ライブラリには、配列の機能をサポートするライブラリが数多く含まれています。その中の一つが、arrayコンテナのdata()メソッドです。C++のarray::data()は、オブジェクトの先頭要素を指すポインタを返します。これにより、配列の内部バッファへ直接アクセスしたり、連続したメモリを前提とするC言語スタイルのAPIに配列を渡したりすることができます。構文array_name.data();パラメータこの関数は、引数を受け取りません。戻り値配列の先頭要素を指すポインタを返します。戻り値の型は