フィールド名を持つ 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_iterator
s とインデックス (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
}