c++ - 在 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++ 很陌生,任何帮助将不胜感激。谢谢!
解决方案
这条线没有意义:
std::vector<Student>::iterator &forwardmarch = &students.begin();
在左侧,与号表示您正在声明对象引用(不是对象)。在右侧,& 号告诉获取指向对象的指针,而不是对象本身。正确的用法是声明一个新对象并直接赋值:
std::vector<Student>::iterator forwardmarch = students.begin();
这是非常基本的东西。阅读主题将是 C++ 中的指针和引用。
推荐阅读
- java - 双向链表上的冒泡排序问题
- xslt - XSLT:查找最大 Effdt,但排除大于今天的任何日期
- or-tools - 获取车辆路径问题的距离成本函数内的当前 SearchDepth
- youtube-data-api - Youtube API 频道会员 (sponsors.list) 的分页是否损坏?
- python - django_tastypie 无法识别网址
- vue.js - vue: v-else 没有完全显示上下文
- spring-boot - 从运行 SpringBoot 应用程序的 Pod 连接到 GC 存储
- flask - 如何在烧瓶中为 wysisyg 编辑器 insertImage 设置默认目录
- angular - 将文件从 Angular 7 Web App 上传到 Apollo 2.0 GraphQL Server
- javascript - 如何从服务器获取图像文件并将其压缩到sailsjs