C++ STLのvector::begin()とvector::end()の使い方を徹底解説
C++のSTL(標準テンプレートライブラリ)におけるvector::begin()およびvector::end()は、ベクター内の要素を走査するために欠かせないメンバ関数です。本記事では、それぞれの役割と実際のコード例を通じて、その使い方をわかりやすく解説します。
vector::begin() とは
vector::begin()は、コンテナ(ベクター)の先頭要素を指すイテレータを返す双方向イテレータ用の関数です。この戻り値を使うことで、ベクターの最初の要素から順番にアクセスすることができます。
vector::end() とは
vector::end()は、コンテナの末尾(最後の要素の次の位置)を指すイテレータを返す双方向イテレータ用の関数です。注意点として、end()が返すイテレータは最後の要素そのものではなく、その「直後」を指します。したがって、begin()からend()までループを回すことで、すべての要素を漏れなく処理できます。
処理の流れ(アルゴリズム)
開始
ベクターvを初期化する
ベクターv1とイテレータitを宣言する
ベクターに要素を挿入する
要素を出力する
終了
サンプルコード
以下のコードでは、begin()を使った要素の挿入と、begin()・end()を組み合わせた全要素のコピー・表示を行っています。
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
// 値付きのベクターvと空のベクターv1を宣言
vector<int> v = { 50,60,70,80,90}, v1;
// イテレータを宣言
vector<int>::iterator it;
// begin()で先頭位置を指定し、値40を挿入
it = v.insert(v.begin(), 40);
// begin()で先頭位置を指定し、値30を1個挿入
it = v.insert(v.begin(), 1, 30);
cout << "The vector1 elements are: ";
// begin()からend()までループしてvの全要素を表示
for ( it = v.begin(); it != v.end(); ++it)
cout << *it << " "<<endl;
// vの先頭から末尾までの全要素を、v1の先頭へ一括挿入
v1.insert(v1.begin(),v.begin(),v.end());
cout << "The vector2 elements are: ";
// begin()からend()までループしてv1の全要素を表示
for (it = v1.begin(); it != v1.end(); ++it)
cout << *it << " "<<endl;
return 0;
}
実行結果
The vector1 elements are: 30 40 50 60 70 80 90 The vector2 elements are: 30 40 50 60 70 80 90
まとめ
begin()とend()は、C++のベクターを操作するうえで基本となるイテレータ取得関数です。insert()による要素の挿入位置の指定や、範囲ベースのコピー・走査など、さまざまな場面で活用できます。特にend()が「最後の要素の次」を指すという仕様を正しく理解しておくことで、バグのない安全なコードを書くことができます。
-
【C++ STL】set::begin()とset::end()の使い方をサンプルコードで解説
C++のSTLコンテナであるstd::setには、要素を走査するための重要なメンバ関数としてbegin()とend()があります。 set::begin()は双方向イテレータの一種で、setコンテナの先頭要素を指すイテレータを返します。setは自動的に要素が昇順にソートされるため、begin()が指すのは常に最小の値を持つ要素です。 set::end()も同様に双方向イテレータを返しますが、こちらは最後の要素そのものではなく、最後の要素の「次」の位置(終端)を指す点に注意が必要です。つまり、end()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。 サンプ
-
STLを使ったC++のvector(ベクトル)実装プログラム
std::vectorは、動的配列のように要素の挿入や削除に応じて自動的にサイズを変更できるコンテナで、メモリ(記憶域)の管理はコンテナ自身が行います。要素は連続したメモリ領域に配置されるため、イテレータを使ったアクセスや走査が可能です。また、先頭・中間・末尾のいずれの位置にもデータを挿入・削除できます。 使用する主な関数とその説明 v.size() : ベクトルのサイズ(現在の要素数)を返します。 v.push_back() : ベクトルの末尾に要素を挿入します。 v.pop_back() : ベクトルの末尾から要素を取り除きます。 v.capacity() : 現在ベクトルに