【C++ STL】set::begin()とset::end()の使い方をサンプルコードで解説
C++のSTLコンテナであるstd::setには、要素を走査するための重要なメンバ関数としてbegin()とend()があります。
set::begin()は双方向イテレータの一種で、setコンテナの先頭要素を指すイテレータを返します。setは自動的に要素が昇順にソートされるため、begin()が指すのは常に最小の値を持つ要素です。
set::end()も同様に双方向イテレータを返しますが、こちらは最後の要素そのものではなく、最後の要素の「次」の位置(終端)を指す点に注意が必要です。つまり、end()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。
サンプルコード
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
set<int> s;
set<int>::iterator it;
s.insert(7);
s.insert(6);
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(9);
s.insert(10);
for (auto it=s.begin(); it != s.end(); ++it)
cout << ' ' << *it;
return 0;
}
実行結果
1 2 4 6 7 9 10
この例では、挿入した順番に関係なく、set内の要素は自動的に昇順(1, 2, 4, 6, 7, 9, 10)に並べ替えられています。begin()からend()まで範囲for文のようにイテレータを進めることで、ソート済みの全要素を順番に出力できます。
-
C++のSTL set(セット)における要素の挿入と削除の基本
C++のSTL(標準テンプレートライブラリ)に含まれる set コンテナは、重複しない要素を自動的にソートして管理する便利なデータ構造です。本記事では、setへの挿入と削除の方法を、実際に動作するサンプルコードと出力例とともに詳しく解説します。 要素の挿入:insert() STLのsetに要素を挿入するには、insert() 関数を使用します。insert() はオブジェクトへの参照を受け取り、その要素を適切な位置(自動的にソートされた状態を保つ位置)に追加します。 すでに同じ値がセット内に存在する場合、重複した挿入は行われず、セットの内容は変化しません。これがsetコンテナの大きな特徴です
-
C++ STLにおけるemplace()とinsert()の違いと使い方
C++ STLにおけるemplace操作は、オブジェクトの不要なコピーを回避し、insert操作よりも効率的に要素を挿入できる点が大きな特徴です。insert操作は既存オブジェクトへの参照を受け取るため、コンテナに挿入する際にコピー(またはムーブ)が発生します。一方、emplaceは渡された引数をコンテナ内で直接オブジェクトとして構築するため、余分なコストを抑えられます。emplaceとinsertの違いemplace(): 引数をコンテナに転送し、コンテナ内で直接オブジェクトを構築します(in-place構築)。一時オブジェクトの生成やコピーが不要なため効率的です。insert(): 既存の