首页 > 解决方案 > 在 C++ 中遍历向量时遇到问题

问题描述

我一直在尝试编写一个程序,在其中输入学生类的数据(使用(const string &first_name,const string &last_name,float gpa,int id),它可以显示哪些学生的 gpa 高于 1.00。我在迭代时遇到了麻烦通过一个向量。这是给我带来麻烦的函数:

vector<Student> find_failing_students(vector<Student> &students) {
    vector<Student> failing_students;
    int endVar;
    vector<Student>::iterator it;
    std::vector<Student>::iterator &forwardmarch = &students.begin();

    while(forwardmarch != &students.end())
    {
        Student temp = Student(forwardmarch->first_, forwardmarch->last_, forwardmarch->gpa_, forwardmarch->id_);
        if(temp.getgpa(temp) < 1) {
                    failing_students.push_back(temp);
        forwardmarch++;
    }

std::vector<Student>::iterator &forwardmarch = &students.begin();部分给了我以下错误:从 'std::vector::迭代器*' {aka '__gnu_cxx::__normal_iterator >*'}

while 循环while(forwardmarch != &students.end())也给了我以下错误: 'operator!=' 不匹配(操作数类型是 'std::vector::iterator' {aka '__gnu_cxx::__normal_iterator >'} 和 'std::vector::iterator *' {aka '__gnu_cxx::__normal_iterator >*'})

我已经尝试了很多事情,也尝试过使用更典型的 for 循环,比如

for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
    it->doSomething();
 }

我有点困惑,对 C++ 很陌生,任何帮助将不胜感激。谢谢!

标签: c++vectoriterator

解决方案


这条线没有意义:

std::vector<Student>::iterator &forwardmarch = &students.begin();

在左侧,与号表示您正在声明对象引用(不是对象)。在右侧,& 号告诉获取指向对象的指针,而不是对象本身。正确的用法是声明一个新对象并直接赋值:

std::vector<Student>::iterator forwardmarch = students.begin();

这是非常基本的东西。阅读主题将是 C++ 中的指针和引用。


推荐阅读