我是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();
但我得到一个错误“不匹配'运算符!='。
答案 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();