迭代器类
class QLinkedList::iteratorQLinkedList::iterator 类提供了一个 STL 风格的非 const 迭代器,用于 QLinkedList。了解更多...
公共函数
iterator() | |
bool | operator!=(const QLinkedList<T>::iterator &other) const |
bool | operator!=(const QLinkedList<T>::const_iterator &other) const |
T & | operator*() const |
QLinkedList<T>::iterator | operator+(int j) const |
QLinkedList<T>::iterator & | operator++() |
QLinkedList<T>::iterator | operator++(int) |
QLinkedList<T>::iterator & | operator+=(int j) |
QLinkedList<T>::iterator | operator-(int j) const |
QLinkedList<T>::iterator & | operator--() |
QLinkedList<T>::iterator | operator--(int) |
QLinkedList<T>::iterator & | operator-=(int j) |
T * | operator->() const |
bool | operator==(const QLinkedList<T>::iterator &other) const |
bool | operator==(const QLinkedList<T>::const_iterator &other) const |
详细描述
QLinkedList 拥有 STL 风格迭代器和 Java 风格迭代器。STL 风格迭代器在底层使用,操作起来比较繁琐;然而,它们运行速度略快,并且对于已经熟悉 STL 的开发者来说更具熟悉感。
QLinkedList<T>::iterator 允许您遍历一个 QLinkedList<T> 并修改与迭代器关联的列表项。如果您想遍历一个常量 QLinkedList,请使用 QLinkedList::const_iterator。在非常量的 QLinkedList 上使用 QLinkedList::const_iterator 通常是一个好的做法,除非您需要通过迭代器更改 QLinkedList。常量迭代器运行速度略快,并且可以提升代码可读性。
默认的 QLinkedList::iterator 构造函数创建了一个未初始化的迭代器。在使用之前,您必须使用类似于 QLinkedList::begin(),QLinkedList::end 或 QLinkedList::insert() 的函数来初始化它。以下是打印列表中所有项目的典型循环。
QLinkedList<QString> list; list.append("January"); list.append("February"); ... list.append("December"); QLinkedList<QString>::iterator i; for (i = list.begin(); i != list.end(); ++i) cout << *i << Qt::endl;
STL风格迭代器可以用作 泛型算法 的参数。例如,以下是查找列表中的项的方式。
QLinkedList<QString> list; ... QLinkedList<QString>::iterator it = std::find(list.begin(), list.end(), "Joel"); if (it != list.end()) cout << "Found Joel" << Qt::endl;
让我们看看一些使用 QLinkedList::iterator 可以做,而使用 QLinkedList::const_iterator 则不能做的例子。以下是一个将 QLinkedList<int> 中存储的所有值增加2的示例。
QLinkedList<int>::iterator i; for (i = list.begin(); i != list.end(); ++i) *i += 2;
以下是一个示例,用于从 QLinkedList<QString> 中删除所有以下划线字符开始的项。
QLinkedList<QString> list; ... QLinkedList<QString>::iterator i = list.begin(); while (i != list.end()) { if ((*i).startsWith('_')) i = list.erase(i); else ++i; }
调用 QLinkedList::erase() 将迭代器所指向的项从列表中删除,并返回指向下一个项的迭代器。以下是另一种在迭代时删除项的方法。
QLinkedList<QString>::iterator i = list.begin(); while (i != list.end()) { QLinkedList<QString>::iterator previous = i; ++i; if ((*previous).startsWith('_')) list.erase(previous); }
编写如下代码可能是诱人的。
// WRONG while (i != list.end()) { if ((*i).startsWith('_')) list.erase(i); ++i; }
但是,在调用 erase() 后,i
可能会在 ++i
中崩溃,因为在此调用之后,i
将是一个悬空迭代器。
可以在同一列表上使用多个迭代器。如果向列表中添加项,现有迭代器仍然有效。如果从列表中删除项,指向删除项的迭代器将成为悬空迭代器。
警告:共享容器上的迭代器并不完全像 STL 迭代器那样工作。您应该在活动迭代器上避免复制容器。有关更多信息,请参阅 隐式共享迭代器问题。
另请参阅:QLinkedList::const_iterator 和 QMutableLinkedListIterator。
成员函数文档
bool iterator::operator==(const QLinkedList<T>::const_iterator &other) const
bool iterator::operator==(const QLinkedList<T>::iterator &other) const
如果 other 指向与该迭代器相同的项,则返回 true
;否则返回 false
。
另请参阅:operator!=。
bool iterator::operator!=(const QLinkedList<T>::const_iterator &other) const
bool iterator::operator!=(const QLinkedList<T>::iterator &other) const
如果 other 指向与该迭代器不同的项,则返回 true
;否则返回 false
。
另请参阅:operator==。
iterator::iterator()
构建一个未初始化的迭代器。
在未初始化的迭代器上不应调用函数如 operator*() 和 operator++()。在使用之前,请使用 operator=() 将值分配给它。
另请参阅:QLinkedList::begin() 和 QLinkedList::end。
T &iterator::operator*() const
返回对当前元素的可修改引用。
您可以通过在赋值表达式的左侧使用操作符*()来更改元素的值,例如
if (*it == "Hello") *it = "Bonjour";
另请参阅操作符→。
QLinkedList<T>::iterator iterator::operator+(int j) const
返回一个迭代器,该迭代器指向距离此迭代器 j个位置的元素。( j如果为负值,则迭代器向后移动)
对于较大的 j值,此操作可能较慢。
另请参阅操作符-。
QLinkedList<T>::iterator &iterator::operator++()
前缀++运算符(++it
)将迭代器移动到列表中的下一个元素,并返回对新的当前元素的迭代器。
在QLinkedList::end()上调用此函数会导致未定义的结果。
另请参阅操作符--。
QLinkedList<T>::iterator iterator::operator++(int)
这是一个重载的函数。
后缀++运算符(it++
)将迭代器移动到列表中的下一个元素,并返回对之前当前元素的迭代器。
QLinkedList<T>::iterator &iterator::operator+=(int j)
将迭代器前移 j个元素。(如果 j为负,则迭代器向后移动)
QLinkedList<T>::iterator iterator::operator-(int j) const
返回一个迭代器,指向距离此迭代器 j个位置的元素(如果 j为负值,则迭代器向前移动)
对于较大的 j值,此操作可能较慢。
另请参阅操作符+。
QLinkedList<T>::iterator &iterator::operator--()
前缀–运算符(--it
)使前一个元素变为当前元素,并返回对新当前元素的迭代器。
在QLinkedList::begin()上调用此函数会导致未定义的结果。
另请参阅操作符++。
QLinkedList<T>::iterator iterator::operator--(int)
这是一个重载的函数。
后缀–运算符(it--
)使前一个元素变为当前元素,并返回对之前当前元素的迭代器。
QLinkedList<T>::iterator &iterator::operator-=(int j)
使迭代器向后移动 j个元素。(如果 j为负,则迭代器向前移动)
T *iterator::operator->() const
返回当前元素的指针。
另请参阅operator*().
© 2024 Qt公司。本文档中的文档贡献的版权属于其各自的拥有者。本文档是根据自由软件基金会的规定,以GNU自由文档许可证版本1.3的条款发布的。Qt及其相关标识是芬兰及其它国家/地区的Qt公司注册商标。所有其他商标属于其各自的所有者。