Это моя тестовая программа. Переменная s1 содержит вектор, который содержит объекты определенного пользователем типа. Я хочу перегрузить оператор <<, чтобы красиво печатать этот вектор, по одному элементу в строке. </p>
#include <iostream>
#include "myclasses.h"
using namespace std;
int main() {
myclass s1;
s1.add_point(7000, 10);
s1.add_point(8000, 11);
s1.add_point(9000, 12);
cout << s1 << endl;
return 0;
}
Вот определение класса. По сути, это просто массив других пользовательских объектов. Я хочу, чтобы оператор << печатал все записи, по одной на строку. Предположим, что «anotherclass» имеет необходимые методы поддержки. </p>
class myclass {
vector<anotherclass> ps;
public:
void add_point(double, double);
friend ostream &operator<<( ostream &out, const myclass &s );
};
void myclass::add_point(double first, double second) {
ps.push_back(anotherclass(first, second));
}
ostream &operator<<( ostream &out, const myclass &s ) {
vector<anotherclass>::iterator itr;
vector<anotherclass> psp=s.ps; // Why do I need this? Why can't I use s.ps.begin() and s.ps.end() in the for loop directly?
for ( itr=psp.begin() ; itr != psp.end() ; ++itr ) {
cout << "(" << itr->get_first() << "," << itr->get_second() << endl;
}
return out;
}
Я прокомментировал одну строку, которую мне нужно было добавить, чтобы это работало в моей программе. Я понятия не имею, зачем нужна эта линия. Может ли кто-нибудь объяснить мне это?