STL列表和迭代器

时间:2011-03-20 13:55:41

标签: c++ stl iterator

您好,我无法让它工作。我有4个成员的结构,我创建了列表和迭代器:

std::list<structure> one;
std::list<structure>::iterator two;

现在我想访问element:

one.end-1;
two = one.end()-1;

它不起作用&gt;。&gt; Compilator会抛出14个错误。

错误如下:

所有这些都是这样的:

  

Glowne.cpp(105):错误C2784:   “reverse_iterator的&LT; _RanIt&GT; :: difference_type   std :: operator - (const   的std :: reverse_iterator的&LT; _RanIt&GT; &安培;,const的   的std :: reverse_iterator的&LT; _RanIt2&GT; &amp;)':   无法推断出模板参数   'const std :: reverse_iterator&lt; _RanIt&gt;   &安培;”从   '的std ::列表&LT; _Ty&GT; :: _迭代&LT; _Secure_validation&GT;'   用[_Ty = Klient,   _Secure_validation = true]

一切都很好,谢谢你提到回来的方法,真的是你们很棒。

3 个答案:

答案 0 :(得分:6)

双向迭代器(由std::list使用)不支持“指针算术”,只有一步:

two = one.end();
--two;

此外,声明one.end-1;完全没有效果,我会摆脱它。

答案 1 :(得分:4)

如果您想要列表的最后一个元素,请使用back()成员。

答案 2 :(得分:1)

List不是随机访问容器,这意味着您不能对其迭代器使用算术运算。

要遍历列表,您可以使用运算符++--将迭代器移动一个元素。 如果你想移动到任意位置,请使用其他东西,例如std :: vector。

大多数容器都有front()back()方法,用于访问第一个和最后一个元素。