在C ++中遍历向量时遇到麻烦

时间:2020-03-05 10:11:13

标签: c++ vector iterator

我一直在尝试编写一个程序,在其中输入学生班级的数据(((常量字符串&first_name,常量字符串&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 :: iterator&'的非常量引用(又名'__gnu_cxx :: __ normal_iterator>&'},其右值是输入'std :: vector :: iterator *'{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 ++来说还很陌生,我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:6)

这行没有意义:

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

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

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

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

相关问题