C++ STLのforward_list::remove()関数の使い方と実例解説
本記事では、C++ STLにおける forward_list::remove() および forward_list::remove_if() 関数の動作、構文、具体的な使用例について詳しく解説します。
STLにおけるforward_listとは?
forward_list(前方リスト)は、シーケンスコンテナの一種で、シーケンス内の任意の位置に対して定数時間での挿入・削除操作を可能にするコンテナです。内部的には単方向連結リスト(singly-linked list)として実装されており、各要素が次の要素へのリンクを持つことで順序が維持されます。双方向リストである std::list と比べてメモリ効率が良いのが特徴です。
forward_list::remove()とは?
forward_list::remove() は、C++ STLに組み込まれた関数で、ヘッダーファイル <forward_list> 内で宣言されています。この関数は、指定した値と一致するすべての要素をforward_listから削除します。削除された要素の数だけ、コンテナのサイズが減少します。
構文
flist_container1.remove(const value_type& value);
この関数が受け取るパラメータは1つだけです。それは、削除したい値です。指定された値と等しいすべての要素がコンテナから取り除かれます。
戻り値
この関数は何も返しません(戻り値はvoid型です)。
使用例
以下のコードでは、forward_listから特定の値を持つ要素を削除する方法を示しています。
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> forwardList = {2, 3, 1, 1, 1, 6, 7};
// remove操作適用前のリスト
cout<<"list before applying remove operation : ";
for(auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
// remove操作適用後のリスト
cout<<"\nlist after applying remove operation : ";
forwardList.remove(1);
for(auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
}出力結果
上記のコードを実行すると、次のような出力が生成されます。
list before applying remove operation : 2, 3, 1, 1, 1, 6, 7 list after applying remove operation : 2, 3, 6, 7
この例では、値「1」に一致する3つの要素がすべて削除され、残りの要素 {2, 3, 6, 7} のみがリストに残っていることが確認できます。
補足:remove_if()との違い
remove() が特定の値と一致する要素を削除するのに対し、remove_if() は述語(条件式やラムダ式など)を引数として受け取り、その条件を満たすすべての要素を削除します。より柔軟な削除条件が必要な場合には remove_if() の利用が有効です。
-
C++でボックス削除問題を攻略!区間DPで最大得点を求める方法
問題概要ここに、色の異なる複数の箱が一列に並んでいるとします。それぞれの色は異なる正の整数で表されます。プレイヤーは複数のラウンドに分けて箱を取り除き、すべての箱をなくすことを目指します。各ラウンドでは同じ色が連続した箱(k個、k >= 1)を選んでまとめて取り除くことができ、その際に k × k 点の得点を獲得できます。例えば、入力が [1,3,2,2,2,4,4,3,1] の場合、出力は 21 になります。この記事では、獲得できる得点を最大化するためのアルゴリズムを解説します。出力が 21 になる理由実際の消し方の一例を見てみましょう。[1,3,2,2,2,4,4,3,1] → 3個
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス