【发布时间】:2023-04-01 00:13:01
【问题描述】:
[情况]
QVector 和 QList 都会出现这种情况,这里我以后者为例。
测试代码:
QList<int> test;
for (int i=0; i<10; i++)
test.append(i);
// First
qDebug()<<"[First]";
qDebug()<<"Directly return:"<<test.first();
QList<int>::iterator itr_first = test.begin();
qDebug()<<"By iterator:"<<*itr_first;
// Last
qDebug()<<"[Last]";
qDebug()<<"Directly return:"<<test.last();
QList<int>::iterator itr_last = test.end();
qDebug()<<"By iterator:"<<*itr_last; //<--- ***No value can be referred from here***
itr_last = itr_last-1;
qDebug()<<"By iterator(modified):"<<*itr_last;
输出为:
[第一个]
直接返回:0
按迭代器:0
[最后一个]
直接返回:9
通过迭代器:-842150451
通过迭代器(修改):9
[问题]
与 QList::begin() 返回第一项的迭代器不同,我不明白为什么 QList::end() 返回无法引用的不可用迭代器。这对我来说很烦人,有时会让我的程序出错。
这是什么原因?和 C++ 对流有什么关系吗?
【问题讨论】:
-
请阅读半开范围和结束迭代器,
begin和end背后的概念是 C++ 的基础(以及编程中的任何东西)。 -
谢谢,我有点缺乏这个背景。
-
@KubaOber 我是 OP,我认为它也是重复的。我自己删除有关系吗?
-
是的,但以后先检查是否有重复项。删除许多已回答问题的用户将因浪费大家的时间而被暂停。