C++ 如何迭代常数向量?

C++ 如何迭代常数向量?,c++,visual-c++,C++,Visual C++,我有一个学生向量,它有一个字段名 我想迭代向量 void print(const vector<Student>& students) { vector<Student>::iterator it; for(it = students.begin(); it < students.end(); it++) { cout << it->name << endl;

我有一个学生向量,它有一个字段名

我想迭代向量

void print(const vector<Student>& students)
    {
    vector<Student>::iterator it;
    for(it = students.begin(); it < students.end(); it++)
        {
            cout << it->name << endl;
        }
    }
void打印(常量向量和学生)
{
向量::迭代器;
for(it=students.begin();itcout name使用
常量迭代器
迭代器
允许修改
向量
,因此无法从
常量
容器中获取

此外,编写此循环的惯用方法使用
it!=students.end()
而不是
void print(const vector&students)
{
向量::常量迭代器it;//常量迭代器
for(it=students.begin();it!=students.end();it++)
{
cout name而不是
vector::iterator
,使用
vector::const\u iterator

无效打印(const-vector&students)
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;
        }
    }
{ for(auto it=students.begin();it!=students.end();+it) { cout name您有两个(C++11中有三个)选项:
const_迭代器
s和索引(+C++11中的“range for”)

C++11样式:

void print(const vector<Student>& students) {
    for(auto const& student : students) {
            cout << student.name << endl;
    }
}
void打印(常量向量和学生){
用于(自动施工和学生:学生){

请阅读有关前缀和后缀增量运算符的信息。
it++
应该是
++it
,在极少数情况下(即在迭代时擦除时)需要
it++
。很明显,这种情况下的问题是什么。但是,将来您应该在问题中包含编译器给您的确切错误消息。这个问题没有标记为C++0x1,但很高兴能记住我们的这一特性,可能会鼓励我们切换到C++11.+1…但是如果您决定更改为使用
列表
或类似的东西,您的代码将无法工作。因此,请使用
!=
表单。我是迭代器新手。您能告诉我哪些迭代器不喜欢!=以及为什么吗?@kunjaan:只有随机访问迭代器支持排序(
未充分估计的答案:)为什么你认为它是不相关的?这就是你在C++11中迭代const vector的方式。我说的是被低估了,但拼写错了一个r。无论如何,不要告诉无关的。
template<typename Container>
void func(const Container& container) {
  typename Container::const_iterator iter;
  for (iter = container.begin(); iter != container.end(); ++iter)
    // work with *iter
}
void print(const vector<Student>& students) {
    for(auto const& student : students) {
            cout << student.name << endl;
    }
}