我的任务是显示列表的第一个和最后一个元素。我有迭代器指向列表的第一个和最后一个元素。在他们的帮助下,我正在尝试执行一项任务。一切都与第一个元素一起工作,与最后一个一起工作-程序崩溃。可能是什么问题?
typedef list<float>::iterator it;
it i = X.begin(); it j = X.end();
cout << "First element -->> " << *i << "\tLast element -->> ";
cout << *j << endl;
答案 0 :(得分:2)
根据the docs:
end
返回指向序列中 past-the-end元素的迭代器
该元素不存在,因此您无法访问它。但这使您可以很好地进行迭代(使用<
进行比较,而不是<=
):
for (it = X.begin(); it < X.end(); ++it)
// do stuff
答案 1 :(得分:2)
函数begin()
和end()
定义了半开范围([begin, end)
),这意味着:
该范围包括第一个元素,但不包括最后一个元素。因此,名称以结尾结尾。
请参见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;