不会出现最后一个列表元素的输出

时间:2020-04-20 12:15:50

标签: c++

我的任务是显示列表的第一个和最后一个元素。我有迭代器指向列表的第一个和最后一个元素。在他们的帮助下,我正在尝试执行一项任务。一切都与第一个元素一起工作,与最后一个一起工作-程序崩溃。可能是什么问题?

typedef list<float>::iterator it;
it i = X.begin(); it j = X.end();
cout << "First element -->> " << *i << "\tLast element -->> ";
cout << *j << endl;

2 个答案:

答案 0 :(得分:2)

根据the docs

end返回指向序列中 past-the-end元素的迭代器

该元素不存在,因此您无法访问它。但这使您可以很好地进行迭代(使用<进行比较,而不是<=):

for (it = X.begin(); it < X.end(); ++it)
    // do stuff

答案 1 :(得分:2)

函数begin()end()定义了半开范围([begin, end)),这意味着: 该范围包括第一个元素,但不包括最后一个元素。因此,名称以结尾结尾。

enter image description here

请参见this的答案,以了解The advantage of an half open range

看看cppreference。要打印最后一个元素,请尝试以下操作:

typedef list<float>::iterator it;
it i = X.begin(); it j = X.end();
cout << "First element -->> " << *i << "\tLast element -->> ";
cout << *(j - 1) << endl;

一个更好的选择是rbegin()

typedef list<float>::iterator it;
it i = X.begin(); it j = X.rbegin();
cout << "First element -->> " << *i << "\tLast element -->> ";
cout << *j << endl;