<QtAlgorithms> - 通用算法
<QtAlgorithms>
头文件包含基于模板的通用算法。 更多...
头部文件 | #include <QtAlgorithms> |
函数
uint | qCountLeadingZeroBits(quint8 v) |
uint | qCountLeadingZeroBits(quint16 v) |
uint | qCountLeadingZeroBits(quint32 v) |
uint | qCountLeadingZeroBits(quint64 v) |
uint | qCountTrailingZeroBits(quint8 v) |
uint | qCountTrailingZeroBits(quint16 v) |
uint | qCountTrailingZeroBits(quint32 v) |
uint | qCountTrailingZeroBits(quint64 v) |
void | qDeleteAll(ForwardIterator begin, ForwardIterator end) |
void | qDeleteAll(const Container &c) |
uint | qPopulationCount(quint8 v) |
uint | qPopulationCount(quint16 v) |
uint | qPopulationCount(quint32 v) |
uint | qPopulationCount(quint64 v) |
详细说明
Qt 在 <QtAlgorithms>
中提供了许多全局模板函数,这些函数在容器上工作并执行一些小的任务来简化编程,例如 qDeleteAll(),它会在给定的容器中的所有项目或给定的范围内调用来删除操作。您可以使用这些算法与任何提供 STL-style 迭代器的容器类一起使用,包括 Qt 的 QList,QMap 和 QHash 类。
大多数算法接收 STL-style iterators 作为参数。算法是通用的,因为它们并不绑定到特定的迭代器类;您可以将它们与任何满足一定要求的迭代器一起使用。
不同算法对它们接受的迭代器的需求可能不同。对于每个算法,所需迭代器类型都进行了指定。如果传递了错误的迭代器类型(例如,如果将 QList::ConstIterator 作为 输出迭代器 传递),则肯定会收到编译器错误,尽管可能不是非常有用的错误信息。
一些算法对容器中存储的值类型有特殊要求。例如,qDeleteAll() 要求值类型为非常量指针类型(例如,QWidget *)。每种算法的值类型要求都针对该算法进行指定,如果未满足要求,则编译器将产生错误。
泛型算法可以用于除 Qt 和 STL 提供的其他容器类之外的其他容器类。STL-style 迭代器的语法模仿 C++ 指针,因此可以使用普通数组作为容器,而普通指针作为迭代器。
迭代器类型
算法对其接受的迭代器类型有某些要求,并且这些要求为每个函数分别指定。如果未满足要求,则编译器将产生错误。
输入迭代器
输入迭代器 是可以用于从容器中按顺序读取数据的迭代器。它必须提供以下操作符:==
和 !=
用于比较两个迭代器,一元 *
用于检索存储在项目中的值,以及前缀 ++
用于前进到下一个项目。
Qt 容器的迭代器类型(常量和非常量)都是输入迭代器。
输出迭代器
输出迭代器 是可以将数据按顺序写入容器或某个输出流的迭代器。它必须提供以下操作符:一元 *
用于写入值(即,*it = val
)和前缀 ++
用于前进到下一个项。
Qt 容器的非常量迭代器类型都是输出迭代器。
前向迭代器
前向迭代器 是满足输入迭代器和输出迭代器要求的迭代器。
Qt 容器的非常量迭代器类型都是前向迭代器。
双向迭代器
双向迭代器 是满足前向迭代器要求的迭代器,此外还支持前缀 --
用于向后迭代。
Qt 容器的非常量迭代器类型都是双向迭代器。
随机访问迭代器
最后一类,随机访问迭代器,是最强大的迭代器类型。它支持双向迭代器的所有要求,并支持以下操作
i += n | 使迭代器 i 前进 n 个位置 |
i -= n | 使迭代器 i 后退 n 个位置 |
i + n 或 n + i | 返回项目在迭代器 i 之后 n 个位置的迭代器 |
i - n | 返回项目位于迭代器 i 之前 n 个位置的迭代器 |
i - j | 返回迭代器 i 和 j 之间项目数 |
i[n] | 与 *(i + n) 相同 |
i < j | 如果迭代器 j 位于迭代器 i 之后,则返回 true |
QList 的非常量迭代器类型是随机访问迭代器。
另请参阅容器类 和 <QtGlobal>.
函数文档
[constexpr noexcept]
uint qCountLeadingZeroBits(quint8 v)
返回从最高有效位开始搜索时,v中连续零位数的个数。例如,qCountLeadingZeroBits(quint8(1))返回7,qCountLeadingZeroBits(quint8(8))返回4。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint16 v)
返回从最高有效位开始搜索时,v中连续零位数的个数。例如,qCountLeadingZeroBits(quint16(1))返回15,qCountLeadingZeroBits(quint16(8))返回12。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint32 v)
返回从最高有效位开始搜索时,v中连续零位数的个数。例如,qCountLeadingZeroBits(quint32(1))返回31,qCountLeadingZeroBits(quint32(8))返回28。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint64 v)
返回从最高有效位开始搜索时,v中连续零位数的个数。例如,qCountLeadingZeroBits(quint64(1))返回63,qCountLeadingZeroBits(quint64(8))返回60。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint8 v)
返回从最低有效位开始搜索时,v中连续零位数的个数。例如,qCountTrailingZeroBits(1)返回0,qCountTrailingZeroBits(8)返回3。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint16 v)
这是一个重载函数。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint32 v)
这是一个重载函数。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint64 v)
这是一个重载函数。
<typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)
使用C++ delete
操作符删除范围[begin, end)内的所有项目。项目类型必须是指针类型(例如,QWidget *
)。
示例
QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear();
注意,qDeleteAll()不会从容器中删除项目;它只是对这些项目调用delete
。在上面的示例中,我们调用clear()来删除项目。
此函数还可以用于删除存储在关联容器(如QMap和QHash)中的项目。此函数将删除每个容器中存储的对象;用作键的对象将不会删除。
参阅前向迭代器。
模板 <typename Container> void qDeleteAll(const Container &c)
这是一个重载函数。
这相当于 qDeleteAll(c.begin(), c.end())。
[constexpr noexcept]
uint qPopulationCount(quint8 v)
返回 v 中设置的位数数。这个数字也称为 v 的汉明重量。
[constexpr noexcept]
uint qPopulationCount(quint16 v)
这是一个重载函数。
[constexpr noexcept]
uint qPopulationCount(quint32 v)
这是一个重载函数。
[constexpr noexcept]
uint qPopulationCount(quint64 v)
这是一个重载函数。
© 2024 Qt公司。以下简称Qt公司的文档贡献是各自所有者的版权。本提供的文档受Free Software Foundation发布的GNU自由文档许可证版本1.3的条款许可。Qt和相应标志是芬兰及或全球其它国家Qt公司的商标。所有其他商标均为各自所有者的财产。