HOWTO · C++

C++ のベクトル反復子

このチュートリアルでは、C++ でベクトルを反復処理する方法を示します。

このページの内容

このチュートリアルでは、C++ でベクトルを反復処理する方法を示します。

C++ には、ベクトルを反復処理するためのメソッドが多数用意されています。 これらのメソッドは反復子と呼ばれ、STL コンテナーのメモリ アドレスを指します。 このチュートリアルでは、C++ でベクトルを反復処理するさまざまな方法を示します。

begin() および end() メソッドを使用して、C++ でベクターを反復処理する

begin() メソッドはコンテナーの開始点を返し、end() メソッドはコンテナーの終点を返します。 これらのメソッドは両方とも、反復子がベクトルの値を表示または使用した後に使用できます。

例を参照してください。

#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
  vector<char> DemoVector = {'d', 'e', 'l', 'f', 't', 's', 't', 'a', 'c', 'k'};

  // Declare the iterator to a vector
  vector<char>::iterator ptr;

  // use begin() and end() to dispaly the members of the vector
  cout << "The vector values are : ";
  for (ptr = DemoVector.begin(); ptr < DemoVector.end(); ptr++)
    cout << *ptr << " ";

  return 0;
}

上記のコードは、begin() および end() イテレータ メソッドを使用してベクトル値を表示します。 出力を参照してください。

The vector Values are : d e l f t s t a c k

advance() メソッドを使用して、C++ でベクトルを反復処理する

advance() メソッドは、特定の数値が引数に与えられるまで反復子の位置をインクリメントするために使用されます。 それがどのように機能するか見てみましょう。

#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
  vector<char> DemoVector = {'d', 'e', 'l', 'f', 't', 's', 't', 'a', 'c', 'k'};

  // Declare the iterator to a vector
  vector<char>::iterator ptr = DemoVector.begin();

  // Use advance() to increment iterator position to 6th element
  advance(ptr, 5);

  cout << "The element after incrementing the iterator position is : ";
  cout << *ptr << " ";

  return 0;
}

上記のコードは advance メソッドを使用して、反復子の位置を 6 番目の要素 s にインクリメントします。 出力を参照してください。

The element after incrementing the iterator position is : s

next() および prev() メソッドを使用して、C++ でベクトルを反復処理する

next() メソッドは新しいイテレータを返すために使用され、そのイテレータはその引数で指定された位置を進めた後にポイントします。 同様に、prev() メソッドを使用して新しい反復子を返します。その反復子は、引数で指定された位置をデクリメントした後にポイントします。

next および prev メソッドを使用してベクトルを反復処理してみましょう。

#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
  vector<char> DemoVector = {'d', 'e', 'l', 'f', 't', 's', 't', 'a', 'c', 'k'};

  // Declaring iterators to a vector
  vector<char>::iterator ptr = DemoVector.begin();
  vector<char>::iterator ftr = DemoVector.end();

  // Use next() method to return new iterator points to the 5th element
  auto DemoIterator1 = next(ptr, 4);

  // Use prev() method to return new iterator points to 4th element
  auto DemoIterator2 = prev(ftr, 4);

  // Display next iterator position
  cout << "Element of new iterator using next() is : ";
  cout << *DemoIterator1 << " ";
  cout << endl;

  // Display prev iterator position
  cout << "Element of new iterator using prev() is : ";
  cout << *DemoIterator2 << " ";
  cout << endl;

  return 0;
}

上記のコードは、next() および prev() メソッドを使用してベクトルを反復処理します。 出力を参照してください。

Element of new iterator using next() is : t
Element of new iterator using prev() is : t

inserter() メソッドを使用して、C++ でベクターを反復処理する

このメソッドは、ベクターを繰り返し処理しながらベクターに要素を挿入します。 このメソッドは 2つのパラメーターを受け取ります。最初のパラメーターはコンテナーで、もう 1つは要素が挿入される位置です。

それでは、繰り返しながらベクトルに要素を挿入する例を試してみましょう。

#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
  vector<char> DemoVector1 = {'d', 'e', 'l', 'f', 't', 's', 't', 'a', 'c', 'k'};
  vector<char> DemoVector2 = {'.', 'c', 'o', 'm'};

  // Declare iterator to a vector
  vector<char>::iterator ptr = DemoVector1.begin();

  // Use advance to set the position
  advance(ptr, 10);

  // copy 1 vector elements into other using inserter()
  copy(DemoVector2.begin(), DemoVector2.end(), inserter(DemoVector1, ptr));

  // Display the new vector elements
  cout << "The new vector after insertion of elements is : ";
  for (char &a : DemoVector1) cout << a << " ";

  return 0;
}

上記のコードは、反復中にあるベクトルの要素を別の特定の位置に挿入します。 出力を参照してください。

The new vector after insertion of elements is : d e l f t s t a c k . c o m