未能使用向量迭代器,C++

问题描述:

我想迭代一个向量,该向量持有指向Student类型对象的指针。 矢量的声明如下:static vector<Student*> students;未能使用向量迭代器,C++

无论如何,我想使用的功能pickWinners()的迭代器:

vector<Student*>::iterator p1 = students.begin(); 
vector<Student*>::iterator p2 = p1; 
p2++; 

据我了解,P1是一个指针的指针,以学生。但是,当我尝试这个(例如):

*p1->print(); 

我得到了一个错误:

Hire.cpp:192: error: request for member ‘print’ in ‘* p1.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> with _Iterator = Student**, _Container = std::vector >’, which is of non-class type ‘Student*’ make: * [Hire.o] Error 1

这没有任何意义,我。我知道问题不在print()中。 我试过

Student *student = students.at(0); 
student->print(); 

和一切都很完美。我在这里很笨,有什么想法? 谢谢!

期望的结果将由

(*p1)->print(); 

来实现在你的情况下,代码解析为*(p1->print());,因为operator->具有比operator*更高的优先级的,参见例如,the precedence table on wikipedia

+0

喔,这么愚蠢。谢谢和toda – yotamoo

P1是一个迭代和对于优先规则,编译器将其解释为:

*(p1->print()); 

但是你要的是:

(*p1)->print(); 

你可能想/需要(*p1)->print();原样,它会分析,如果你会写*(p1->print());

机会是约20:1你真的会更好存储Student s而不是Student * s。

一旦你解决了这个问题,你可能想要摆脱Student::print(),而不是提供std::ostream &operator<<(std::ostream &, Student const &);。与在的地方,你可以这样做:

std::cout << *p1; 

和(例如)打印您的整个阵列工程以类似:

std::copy(students.begin(), students.end(), 
      std::ostream_iterator<Student>(std::cout, "\n")); 
+0

+1。你正在赌注还是只是打几率? – Potatoswatter

+0

+1不存储指向对象的指针。 –

+0

@Patatoswatter:只是说几率。 –