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

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

本記事では、C++におけるforward_listassign()関数の動作について詳しく解説します。

forward_listとは

forward_listは、通常のリスト(std::list)と異なり、次の要素とのリンクのみを保持するコンテナです。通常のリストは前後両方向の要素とリンクしているため、前方・後方のどちらの方向にも反復処理が可能ですが、forward_listは前方方向にしか反復できません。その代わり、メモリ使用量が少なく、軽量な動作が特徴です。

assign()関数とは

forward_list::assign()関数は、C++標準テンプレートライブラリ(STL)の一部です。この関数は、フォワードリストに要素を挿入するために使用されます。すでにリストに要素が含まれている場合は、既存の要素がすべて削除され、新しく指定した要素に置き換えられます。

この関数を呼び出すには、ヘッダーファイル<forward_list>をインクルードする必要があります。

構文

この関数には3種類の構文があり、それぞれ異なる方法で要素を割り当てます。

  • Forward_list_name.assign(initializer_list);
  • Forward_list_name.assign(iterator itr1, iterator itr2);
  • Forward_list_name.assign(count, value);

パラメータの詳細

initializer_list(初期化子リスト):1つ目の形式では、渡された初期化子リストの値が、記述した順序どおりにフォワードリストへ格納されます。

iterator(イテレータ):2つ目の形式では、イテレータitr1とitr2が指す範囲内の値がフォワードリストに格納されます。この範囲にはitr1が指す要素は含まれますが、itr2が指す要素は含まれません(半開区間)。

count と value(個数と値):3つ目の形式では、「count」は挿入する要素の個数を表し、「value」は各要素に割り当てる値を表します。

戻り値

この関数は、いかなる値も返しません(戻り値はvoid型です)。

使用例

入力: assign(5, 1)
出力: 1 1 1 1 1

解説:

ここではint型のフォワードリスト「Lt」を作成し、assign()関数を使ってcountvalueをパラメータとして値を割り当てています。

その結果、リスト「Lt」には値1を持つ5つの要素が割り当てられ、出力は「1 1 1 1 1」となります。

サンプルプログラムのアプローチ

  • まず、int型のフォワードリストを3つ作成します。ここでは「Lt1」「Lt2」「Lt3」とします。
  • assign()関数に初期化子リストを渡して、Lt1に要素を割り当てます。
  • assign()関数にcountとvalueを渡して、Lt2に要素を割り当てます。
  • assign()関数に2つのイテレータを渡して、Lt3に要素を割り当てます。ここでは、それぞれLt1の先頭位置と末尾位置を指すイテレータを使用します。

アルゴリズム

Start
Step 1->main()関数内で
   forward_lists<int> Lt1, Lt2, Lt3 を宣言
   Lt1.assign(初期化子リスト) を呼び出す
   Lt2.assign(count, value) を呼び出す
   Lt3.assign(Lt1.begin(), Lt1.end()) を呼び出す
Stop

サンプルコード

#include <forward_list>
#include <iostream>
using namespace std;
int main() {
   forward_list<int> Lt1;
   forward_list<int> Lt2;
   forward_list<int> Lt3;
   // Lt1に要素を割り当てる
   Lt1.assign({4,9,7,8});
   // Lt2に要素を割り当てる
   Lt2.assign(3,6);
   // Lt3に要素を割り当てる
   Lt3.assign(Lt1.begin(),Lt1.end());
   // リストを表示
   cout << "Lt1: ";
   for (int& D : Lt1)
      cout << D << " ";
      cout << endl;
   // Lt2を表示
      cout << "Lt2: ";
      for (int& D : Lt2)
         cout << D << " ";
   // Lt3を表示
      cout << "Lt3: ";
      for (int& D : Lt3)
         cout << D << " ";
   return 0;
}

実行結果

上記のコードを実行すると、以下の出力が生成されます。

Lt1: 4 9 7 8
Lt2: 6 6 6
Lt3: 4 9 7 8

まとめ

forward_list::assign()関数を使うことで、既存の要素をすべて置き換えて新しい要素を簡単に割り当てることができます。初期化子リスト、イテレータの範囲、個数と値の組み合わせという3つの方法を使い分けることで、柔軟にリストの内容を管理できます。片方向リンクリストであるforward_listはメモリ効率に優れているため、前方方向への走査だけで十分な場面でぜひ活用してください。

  1. C++ STLのlist::reverse()関数の使い方と実例解説

    本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar

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

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