如何迭代常量向量?

我有一个学生的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和索引(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 */ } 

你应该更喜欢使用!=而不是<与迭代器 – 后者不适用于所有的迭代器,前者将会。 与前者甚至可以使代码更通用(以便您甚至可以更改容器types,而无需触摸循环)

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

改用const_iteratoriterator允许修改vector ,所以你不能从const容器中获得一个。

另外,写这个循环的惯用方法是使用it != students.end()而不是< (尽pipe这应该在一个vector )。

而不是vector<Student>::iterator ,使用vector<Student>::const_iterator

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

C ++ 11风格:

 void print(const vector<Student>& students) { for(auto const& student : students) { cout << student.name << endl; } }