迭代器类

class QLinkedList::iterator

QLinkedList::iterator 类提供了一个 STL 风格的非 const 迭代器,用于 QLinkedList。了解更多...

公共函数

iterator()
booloperator!=(const QLinkedList<T>::iterator &other) const
booloperator!=(const QLinkedList<T>::const_iterator &other) const
T &operator*() const
QLinkedList<T>::iteratoroperator+(int j) const
QLinkedList<T>::iterator &operator++()
QLinkedList<T>::iteratoroperator++(int)
QLinkedList<T>::iterator &operator+=(int j)
QLinkedList<T>::iteratoroperator-(int j) const
QLinkedList<T>::iterator &operator--()
QLinkedList<T>::iteratoroperator--(int)
QLinkedList<T>::iterator &operator-=(int j)
T *operator->() const
booloperator==(const QLinkedList<T>::iterator &other) const
booloperator==(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::endQLinkedList::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_iteratorQMutableLinkedListIterator

成员函数文档

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公司注册商标。所有其他商标属于其各自的所有者。