我有一个包含字段名称的 Student vector 。
我想遍历 vector 。
void print(const vector<Student>& students)
{
vector<Student>::iterator it;
for(it = students.begin(); it < students.end(); it++)
{
cout << it->name << endl;
}
}
这在 C++ 中显然是非法的。
请帮忙。
最佳答案
您有两个(C++11 中三个)选项: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
}
关于c++ - 如何迭代常量 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4890497/