C++ STLのforward_list::operator=(代入演算子)の使い方を徹底解説
本記事では、C++における forward_list::operator= の仕組み、構文、具体的な使用例について詳しく解説します。
STLにおけるforward_listとは?
forward_listは、シーケンス内の任意の位置に対して定数時間での挿入・削除操作を可能にするシーケンスコンテナです。内部的には単方向リンクリストとして実装されており、各要素が次の要素へのリンクを持つことで順序が維持されます。
双方向リストである std::list と比べると、逆方向への走査ができない代わりにメモリ効率が良く、より軽量な動作が特徴です。
forward_list::operator=とは?
forward_list::operator= は、forward_listコンテナに対して新しい値を割り当てるための代入演算子です。既存の要素をすべて置き換え、コンテナの内容を別のforward_listの内容で上書きします。
また、この演算子は代入元のコンテナのサイズに合わせて、代入先のforward_listのサイズも自動的に調整します。
構文
Forward_container1 = (Forward_container2);
この演算子は、同じ型の別のforward_listコンテナを引数として受け取ります。
戻り値
戻り値は「*this」ポインタ、つまり代入先のコンテナ自身への参照です。
サンプルコード1:基本的な使い方
以下のコードでは、2つのforward_listを作成して要素を挿入し、「=」演算子を使ってforwardList1の要素をforwardList2の内容で上書きしています。
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> forwardList1 = {10, 20, 30 };
forward_list<int> forwardList2 = { 0, 1, 2, 3 };
forwardList1 = forwardList2;
cout << "my forwardList1 after using = operator with forwardList2\n";
for (auto i = forwardList1.begin(); i != forwardList1.end(); ++i)
cout << ' ' << *i;
return 0;
}
出力結果
上記のコードを実行すると、次の出力が生成されます。
my forwardList1 after using = operator with forwardList2 0 1 2 3
このように、代入後のforwardList1には元の {10, 20, 30} ではなく、forwardList2の要素 {0, 1, 2, 3} が格納されていることが確認できます。
サンプルコード2:代入元のコンテナはどうなる?
次に、代入後に代入元であるforwardList2の状態がどうなるかを確認してみましょう。以下のコードでは、代入操作の後に両方のコンテナの内容を出力しています。
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> forwardList1 = {10, 20, 30 };
forward_list<int> forwardList2 = { 0, 1, 2, 3 };
forwardList1 = forwardList2;
cout << "my forwardList1 after using = operator with forwardList2\n";
for (auto i = forwardList1.begin(); i != forwardList1.end(); ++i)
cout << ' ' << *i;
cout << "\n my forwardList2 after using = operator with forwardList1\n";
for (auto i = forwardList2.begin(); i != forwardList2.end(); ++i)
cout << ' ' << *i;
return 0;
}
出力結果
上記のコードを実行すると、次の出力が生成されます。
my forwardList1 after using = operator with forwardList2 0 1 2 3 my forwardList2 after using = operator with forwardList1 0 1 2 3
まとめ
実行結果から分かるように、代入演算子「=」を使用しても、代入元のforwardList2の内容は変更されず、そのまま保持されます。つまり、forward_list::operator= はコピー代入を行うため、代入先のコンテナだけが更新されるという点が重要なポイントです。
-
C++ STL入門:setとunordered_setの違いを徹底解説
本記事では、C++ STLにおける set と unordered_set の概要をわかりやすく解説し、両者の違いについても詳しく学んでいきます。 setとは? set(セット)は、Key型の一意なオブジェクトをソート済みの状態で格納する連想コンテナです。各要素は一度しか出現できず、重複した値は許されません。ユーザーは任意の順序で要素を挿入してsetを作成できますが、setは常にソートされた形でデータを返します。つまり、setにはデータを並べ替えるための仕組みが内部に組み込まれており、その処理はユーザーから抽象化されています。 setを使うべき主なケースは以下の通りです。 ソート済みのデ
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス