定数ベクトルを反復処理するにはどうすればいいですか? 質問する

定数ベクトルを反復処理するにはどうすればいいですか? 質問する

フィールド名を持つ Student のベクトルがあります。

ベクトルを反復処理したいです。

void print(const vector<Student>& students)
    {
    vector<Student>::iterator it;
    for(it = students.begin(); it < students.end(); it++)
        {
            cout << it->name << endl;
        }
    }

これは明らかに C++ では違法です。

助けてください。

ベストアンサー1

2 つのオプション (C++11 では 3 つ) があります: const_iterators とインデックス (C++11 では + "range-for")

void func(const std::vector<type>& vec) {
  std::vector<type>::const_iterator iter;
  for (iter = vec.begin(); iter != vec.end(); ++iter)
    // do something with *iter

  /* or
  for (size_t index = 0; index != vec.size(); ++index)
    // do something with vec[index]

  // as of C++11
  for (const auto& item: vec)
    // do something with item
  */
}

!=イテレータでは ではなくを使用することをお勧めします<。後者はすべてのイテレータで機能するわけではありませんが、前者は機能します。前者を使用すると、コードをより汎用的にすることができます (ループに触れることなくコンテナ タイプを変更することもできます)。

template<typename Container>
void func(const Container& container) {
  typename Container::const_iterator iter;
  for (iter = container.begin(); iter != container.end(); ++iter)
    // work with *iter
}

おすすめ記事