访问vector <myclass> </myclass>的迭代器

时间:2014-09-25 21:13:21

标签: c++ oop vector iterator

我有一个类和该类元素的向量。我需要在向量的特定位置插入新对象,但我甚至无法访问我想要的位置。我试图打印我的迭代器,但它不起作用...我用一个向量的int测试迭代器,它工作正常,我只是不能让它与我自己的类一起工作......我错过了什么?

ToDo individualTask;
vector<ToDo> myToDoList;
vector<ToDo>::iterator it;

myToDoList.push_back(individualTask);
cout << myToDoList.size() << endl;

myToDoList.resize(10);

for (it = myToDoList.begin(); it != myToDoList.end(); ++it) {
    cout << *it << endl; // not working
}

我尝试了* it-&gt; toString()并且它说我的类没有方法toString

1 个答案:

答案 0 :(得分:1)

你的代码不工作的原因是你的迭代器所指向的东西(一个ToDo对象)没有定义输出操作符。

如果您想使用ToDo打印出operator<<()对象,则需要为您的班级定义一个。

这是一个粗略的例子,可以给你一个想法:

#include <string>
#include <ctime>
#include <iostream>

// Example ToDo class
class ToDo
{
    // declare friend to allow << to access your private members
    friend std::ostream& operator<<(std::ostream& os, const ToDo& todo);
private:
    std::time_t when; // unix time
    std::string what; // task description

public:
    ToDo(std::time_t when, const std::string& what): when(when), what(what) {}
    // etc...
};

// This should go in a .cpp file. It defines how to print
// Your ToDo class objects
std::ostream& operator<<(std::ostream& os, const ToDo& todo)
{
    // todo.when needs formatting into a human readable form
    // using library functions
    os << "{" << todo.when << ", " << todo.what << "}";
    return os;
}

// Now you should be able to output ToDo class objects with `<<`:

int main()
{
    ToDo todo(std::time(0), "Some stuff");

    std::cout << todo << '\n';
}