C++ でベクトルを繰り返し処理する方法

胡金庫 2023年10月12日
  1. for ループを使ってベクトルを繰り返し処理する
  2. 範囲ベースのループを使ってベクトルを繰り返し処理する
  3. ベクトルを繰り返し処理するための std::for_each アルゴリズムを使用する
C++ でベクトルを繰り返し処理する方法

この記事では、異なるループを用いて C++ ベクトルを繰り返し処理する方法をいくつか紹介します。サンプルコードでは、より良いデモンストレーションのために、繰り返し処理中に要素を表示します。ために cout 操作を使用していることに注意してください。

for ループを使ってベクトルを繰り返し処理する

最初のメソッドは for ループであり、カンマで区切られた 3つの文からなります。まず、変数 i を定義してゼロに初期化することから始めます。次の部分では、変数 ivector の要素数と比較し、それを size() メソッドで取得します。最後の部分は比較部分として繰り返し実行され、i を 1つインクリメントします。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"bit",    "nibble",     "byte",      "char",
                            "int",    "long",       "long long", "float",
                            "double", "long double"};

  for (size_t i = 0; i < str_vec.size(); ++i) {
    cout << str_vec[i] << " - ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

bit - nibble - byte - char - int - long - long long - float - double - long double -

範囲ベースのループを使ってベクトルを繰り返し処理する

for ループは場合によっては非常に読みづらくなることがあり、そのために範囲ベースのループと呼ばれる代替構造があります。このバージョンは、複雑なコンテナ構造の繰り返し処理に適しており、要素にアクセスするための柔軟な機能を提供します。以下のコードサンプルを参照してください。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"bit",    "nibble",     "byte",      "char",
                            "int",    "long",       "long long", "float",
                            "double", "long double"};

  for (auto item : str_vec) {
    cout << item << " - ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

ベクトルを繰り返し処理するための std::for_each アルゴリズムを使用する

STL アルゴリズムには、使用するための広範な機能が用意されており、その中の 1つに繰り返し処理のためのメソッドがあります。次の例は、lambda 式を用いて関数オブジェクトを宣言し、この custom_func を 1つのステートメントでベクトル要素に適用する方法を示しています。

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::for_each;
using std::vector;

int main() {
  vector<int> int_vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  auto custom_func = [](auto &i) { i *= i; };

  for_each(int_vec.begin(), int_vec.end(), custom_func);
  for (auto i : int_vec) cout << i << "; ";
  cout << endl;

  return EXIT_SUCCESS;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Vector