在 C++ 中遍历向量时遇到问题

0 c++ iterator vector

我一直在尝试编写一个程序,在该程序中我为学生班级输入数据(使用(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++;
    }
Run Code Online (Sandbox Code Playgroud)

std::vector<Student>::iterator &forwardmarch = &students.begin();部分给了我以下错误:来自类型为 'std::vector::迭代器*' {又名'__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();
 }
Run Code Online (Sandbox Code Playgroud)

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

ypn*_*nos 6

这条线没有意义:

std::vector<Student>::iterator &forwardmarch = &students.begin();
Run Code Online (Sandbox Code Playgroud)

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

std::vector<Student>::iterator forwardmarch = students.begin();
Run Code Online (Sandbox Code Playgroud)

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

  • 您可能还想提及“while(forwardmarch != &amp;students.end())”中对“&amp;”的误用。 (2认同)