C ++:如何将迭代器设置为另一个列表中的struct内的列表

时间:2014-11-27 02:24:40

标签: c++ list struct iterator

我是c ++的新手,这是我的第一篇文章。我对列表有疑问。

我有一个结构:

struct record
{
     list<string> courseList;
};

列表中还有其他内容,但它们并不相关。我还有一份记录清单

list<record> studentList;

我的问题是,我如何设置一个迭代器到courseList.begin()?

我试过了:

list<record>::iterator sl; //studentList
list<record>::iterator cl; //courseList

cl = (*sl).courseList.begin();

但我得到一个错误“不匹配'运算符!='。

3 个答案:

答案 0 :(得分:0)

list<record>::iterator sl; //studentList

这是一个默认构造的迭代器,意味着它没有引用任何东西,因此不能解引用,并且你只能以非常有限的方式使用它。

list<record>::iterator cl; //courseList

这也是一个默认构造的迭代器,如果它意味着引用一个courselist,那么它的类型错误,它应该是list<string>::iterator

cl = (*sl).courseList.begin();

这试图取消引用不可解除引用的迭代器(非常糟糕,如果你很幸运,你的程序会崩溃。如果你运气不好,它会做更糟糕的事情。)

如果迭代器实际上是可解除引用的,那么表达式的结果将是list<string>::iterator,不能将其分配给cl,因为这是一种不同的类型。

你可能想要这样的东西:

list<record>::iterator sl = studentList.begin();
if (sl != studentlist.end())
{
    list<record>::iterator cl = (*sl).courseList.begin();
    if (cl != sl->courselist.end())
    {
        // do stuff with the iterator
    }
}

cl的初始化程序也可以这样写,这是等价的,可能更常规:

    list<record>::iterator cl = sl->courseList.begin();

答案 1 :(得分:0)

这个问题已得到解答。不成熟的错误,我做了一个list :: iterator而不是list。谢谢大家

答案 2 :(得分:-1)

你应该使用2D矢量:

vector < vector<string> >ele(10);

然后插入如下元素:

ele.at(0).push_back("abc");
ele.at(0).push_back("def");

并使用迭代器

ele.at(0).begin();
ele.at(0).end();