【C++ STL】stack::swap()関数の使い方を徹底解説!構文と実行例
この記事では、C++ STLにおける stack::swap() 関数の動作、構文、具体的な使用例について詳しく解説します。
C++ STLにおけるスタックとは?
スタックはLIFO(Last In First Out:後入れ先出し)方式でデータを格納するデータ構造です。要素の挿入と削除は、常に最後に挿入された要素、つまりスタックの「トップ」に対して行われます。
イメージとしては皿の積み重ねが分かりやすいでしょう。新しい皿を積むときは一番上に置き、皿を取り出すときも一番上から取ります。このように、スタックではすべての操作がトップ側で完結するのが特徴です。
stack::swap()とは?
stack::swap() はC++ STLに用意されている組み込み関数で、<stack> ヘッダーファイル内で定義されています。この関数は、呼び出し元のスタックと引数として渡した別のスタックの内容を丸ごと入れ替えます。つまり、2つのコンテナが保持している要素を効率的に交換することができます。
構文
stack_name.swap(stack& stack2);
パラメータ
この関数は以下のパラメータを受け取ります。
stack2: 内容を入れ替えたい相手となる別のスタックコンテナ。
戻り値
この関数は何も返しません(void型)。
入力例
std::stack<int> odd; odd.emplace(1); odd.emplace(3); odd.emplace(5); std::stack<int> eve; eve.emplace(2); eve.emplace(4); eve.emplace(6); odd.swap(eve);
出力結果
odd: 2 4 6 eve: 1 3 5
上記のように、odd と eve の中身が完全に入れ替わっていることが確認できます。
実際のコード例
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck_1, stck_2;
//スタック1に要素を挿入
stck_1.push(1);
stck_1.push(2);
stck_1.push(3);
stck_1.push(4);
//スタック2に要素を挿入
stck_2.push(5);
stck_2.push(6);
stck_2.push(7);
stck_2.push(8);
//スタック1とスタック2の要素を入れ替える
stck_1.swap(stck_2);
cout<<"Elements in stack 1 are: ";
while (!stck_1.empty()){
cout<<stck_1.top()<<" ";
stck_1.pop();
}
cout<<"\nElements in stack 2 are: ";
while (!stck_2.empty()){
cout<<stck_2.top()<<" ";
stck_2.pop();
}
return 0;
}出力
上記のコードを実行すると、次の出力が得られます。
Elements in stack 1 are: 8 7 6 5 Elements in stack 2 are: 4 3 2 1
この結果から、stck_1 には元々 stck_2 が持っていた要素(8, 7, 6, 5)が入り、逆に stck_2 には元々 stck_1 が持っていた要素(4, 3, 2, 1)が入っていることが分かります。swap() を使えば、ループで一つずつ要素を移し替えることなく、簡単かつ効率的に2つのスタックの中身を交換できるのです。
-
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() 引数:なし 戻り値:ス