// 基于 d3.cpp 的改进
// vector 存放对象的指针
#include <bits/stdc++.h>

using namespace std;

class Student
{
    friend ostream &operator<<(ostream &out, const Student *stu);

private:
    string name;
    int age;

public:
    Student(const string &name, int age)
    {
        this->name = name;
        this->age = age;
    }
};

ostream &operator<<(ostream &out, const Student *stu)
{
    out << "name: " << stu->name << ", age: " << stu->age;
    return out;
}

int main()
{
    vector<Student *> v;
    v.push_back(new Student("张三", 18));
    v.push_back(new Student("李四", 19));
    v.push_back(new Student("王五", 20));

    v.pop_back(); // 删除最后一个元素

    // 创建迭代器
    vector<Student *>::iterator it = v.end();
    while (it != v.begin())
    {
        it--;
        cout << *it << endl; // 重载了<<运算符
        delete *it;          // 释放空间
    }

    return 0;
}
