QTextStream之操纵算子的使用

简介: QTextStream之操纵算子的使用

1 操纵算子

在上一篇文章,小豆君介绍了QTextStream的格式化输出:

int i = 60;
out.setIntegerBase(16);//设置16进制显示,所以使用输入输出流,也可以很容易的进行进制转换
out << i << endl; //output:3c


但是,如果我想输出一个数字表格,每列分别以十进制,二进制,八进制,十六进制进行显示,那么,用上一篇的方法,可以这样写

int main()
{
    QTextStream out(stdout);
    out.setNumberFlags(QTextStream::ShowBase);
    out.setFieldWidth(10);
    out << "dec"
        << "bin"
        << "oct"
        << "hex" << endl;
    QList<int> intList;
    intList << 12 << 16 << 18;
    for (int i = 0; i < intList.size(); ++i)
    {
        int num = intList.at(i);
        out.setIntegerBase(10);
        out << num;
        out.setIntegerBase(2);
        out << num;
        out.setIntegerBase(8);
        out << num;
        out.setIntegerBase(16);
        out << num << endl;
    }
}


输出是:


在for循环中,每次输出一种进制,就需要重新设置输出标志,这显得很不灵活。为了解决这样的问题,可以使用操纵算子,Qt中的操纵算子和标准库中的用法基本相同。

下面是使用操纵算子简化的程序,把for循环替换一下:

for (int i = 0; i < intList.size(); ++i)
{
    //使用操纵算子进行输出
    int num = intList.at(i);
    out << dec << num
        << bin << num
        << oct << num
        << hex << num << endl;
}


上面的bin dec oct hex都被称作操纵算子,这大大简化了代码。

关于QTextStream的操纵算子,大家可以打开Qt的帮助文档:


这些操纵算子都很简单,小豆君就不一一介绍了。

以上的操纵算子都是Qt提供给我们的,但是有时候我们需要一些自定义的操纵算子,下面,我们来看看如何创建自己的操纵算子。

2 创建操纵算子

如何创建操纵算子,最好的参考就是看看Qt代码中如何做的,下面是bin的声明:

QTextStream &bin(QTextStream &s);


它是以QTextStream对象的引用为参数,返回值为QTextStream对象的引用的函数。 例如,我想在输出流中加入一个tab符,那么,可以这样做:

QTextStream &tab(QTextStream &s)
{
    return s << '\t';
}
int main()
{
    QTextStream out(stdout);
    QList<int> intList;
    intList << 12 << 16 << 18;
    for (int i = 0; i < intList.size(); ++i)
    {
        int num = intList.at(i);
        out << tab << num;
    }
}


输出为:


好了,关于操纵算子的内容就讲到这里吧,我们下次再见。


最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者你有不懂的问题,关注公众号后,可加好友或进Qt群获得答案。

相关文章
|
7月前
|
机器学习/深度学习 编解码 并行计算
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
89 0
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
|
6天前
|
机器学习/深度学习 数据可视化 数据挖掘
基于Copula分布的合成数据采样:保持多维数据依赖结构的高效建模方法
本文深入探讨了Copula的基础理论、运作机制及其在数据科学领域的应用。Copula作为一种数学框架,能够将随机变量间的依赖关系与其边际分布分离,特别适用于处理非线性依赖关系或异质分布变量。文章通过年龄与收入的关系分析,展示了Copula在多元分析中的独特优势,并介绍了高斯Copula的具体应用实例。此外,还详细讲解了Copula在合成数据生成中的应用,验证了合成数据在训练机器学习模型时的有效性。
55 18
|
19天前
|
机器学习/深度学习 存储 缓存
ATB概念之:算子tiling
算子 tiling 是一种优化技术,用于提高大规模张量运算的计算效率。它通过将大任务分解为小块,优化内存使用、支持并行计算,并防止内存溢出。在ATB中,tiling data指kernel的分片参数,用于指导计算。ATB提供了三种 tiling data 搬移策略:整体搬移、多stream搬移及随kernel下发搬移,旨在优化内存拷贝任务,提高计算效率。
|
2月前
|
存储 SQL 数据挖掘
TDengine 流计算与窗口机制的深度解析:揭示计数窗口的关键作用
在 TDengine 3.2.3.0 版本中,我们针对流式计算新增了计数窗口,进一步优化了流式数据处理的能力。本文将为大家解读流式计算与几大窗口的关系,并针对新增的计数窗口进行详细的介绍,帮助大家进一步了解 TDengine 流式计算,以便更好地进行应用。
56 1
|
SQL 算法
多层嵌套子查询的unnesting算法解析
嵌套子查询的背景实践中,经常会遇到多层嵌套的SQL,并且多层嵌套之间包含有聚集函数,执行这类SQL的最简单的方法就是一层一层嵌套执行,类似于Nested Loop Join,对于外查询的每一行数据,就要将子查询执行一遍,如果子查询还有孙查询,子查询中的每一行,还要将孙查询执行一遍,……,显尔易见,这种执行方式的效率通常都比较低,尤其是当表的数据量很大时,对性能的影响非常明显。 下面是一个嵌套查询的
FineReport学习(三)——动态隔间运算(四)
FineReport学习(三)——动态隔间运算(四)
FineReport学习(三)——动态隔间运算(四)
|
算法 C++
什么?我的计算机跑不动了?精确式VS启发式
什么?我的计算机跑不动了?精确式VS启发式
162 0
什么?我的计算机跑不动了?精确式VS启发式
|
机器学习/深度学习 自动驾驶 机器人
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool
前不久一篇探讨过去十年深度度量学习研究进展的研究引发热议,不公平的实验设置等因素会使人们对领域进展产生误解。那么 3D 点云算子领域的进展是真实的吗?中科大和微软亚研的研究人员进行了系统性评估,并提出了无需可学参数的新型 3D 点云算子 PosPool。
281 0
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool
|
机器学习/深度学习 算法 计算机视觉
Halcon中一些突然想不起来但确实有用的算子(2)
Halcon中一些突然想不起来但确实有用的算子(2)
598 0
|
机器学习/深度学习 人工智能 自然语言处理
AICompiler编译器介绍及访存密集算子优化
欢迎走进阿里云机器学习PAI AICompiler编译器系列。随着AI模型结构的快速演化,底层计算硬件的层出不穷,用户使用习惯的推陈出新,单纯基于手工优化来解决AI模型的性能和效率问题越来越容易出现瓶颈。为了应对这些问题,AI编译优化技术已经成为一个获得广泛关注的技术方向。这两年来,这个领域也异常地活跃,包括老牌一些的TensorFlow XLA、TVM、Tensor Comprehension、Glow,以及最近呼声很高的MLIR,能够看到不同的公司、社区在这个领域进行着大量的探索和推进。
2167 0
AICompiler编译器介绍及访存密集算子优化