现代C++、STL、QTL的使用

2023-11-07 18:59
文章标签 c++ 使用 stl 现代 qtl

本文主要是介绍现代C++、STL、QTL的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、现代C++中最重要的是:

右值引用&&、移动语义std::move、完美转发std::forward、万能引用T&&
在这里插入图片描述
在这里插入图片描述

void Func(int& x) { cout << "左值引用" << endl; }
void Func(const int& x) { cout << "const左值引用" << endl; }
void Func(int&& x) { cout << "右值引用" << endl; }
void Func(const int&& x) { cout << "const右值引用" << endl; }template<typename T>
void PerfectForward(T&& t)  // 万能引用
{Func(std::forward<T>(t));  // 根据参数t的类型去匹配合适的重载函数
}int main()
{int a = 4;  // 左值PerfectForward(a);const int b = 8;  // const左值PerfectForward(b);PerfectForward(10); // 10是右值const int c = 13;PerfectForward(std::move(c));  // const左值被move后变成const右值return 0;
}

1、std::vector、QVector

2、std::list、QList

3、std::map、QMap

4、std::multimap、QMultiMap

5、std::tuple

(1)创建:

std::tuple<T1, T2, TN> t1;  				//创建一个空的tuple对象(使用默认构造),它对应的元素分别是T1和T2...Tn类型,采用值初始化。
std::tuple<T1, T2, TN> t2(v1, v2, ... TN);  //创建一个tuple对象,它的元素分别是T1和T2 ...Tn类型; 要获取元素的值需要通过tuple的成员get<Ith>(obj)进行获取(Ith是指获取在tuple中的第几个元素,请看后面具体实例)。
std::tuple<T1&> t3(ref&); 					// tuple的元素类型可以是一个引用
std::make_tuple(v1, v2); 					// 像pair一样也可以通过make_tuple进行创建一个tuple对象

(2)取值: std::get()
tuple不支持迭代,只能通过元素索引(或tie解包)进行获取元素的值。

{int n = 1;auto t = std::make_tuple(10, "Test", 3.14, std::ref(n), n);// get尖括号中的值必须是一个整型常量表达式。从0开始计数,意味着get<0>是第一个成员。std::cout << "The value of t is "  << "("<< std::get<0>(t) << ", " << std::get<1>(t) << ", "<< std::get<2>(t) << ", " << std::get<3>(t) << ", "<< std::get<4>(t) << ")\n";// 由于get返回指定元素的引用,所以可用来修改指定位置的元素的值。此处因为第4个元素是引用类型,所以被引用的值也会改变std::get<3>(t) = 9;std::cout << n << std::endl;
}

(3)解包: std::tie()

int myint;
char mychar;
std::tuple<int, float, char> mytuple;
mytuple = std::make_tuple(10, 2.6, 'a');          // packing values into tuplestd::tie(myint, std::ignore, mychar) = mytuple;   // unpacking tuple into variables
std::cout << "myint contains: " << myint << '\n';
std::cout << "mychar contains: " << mychar << '\n';

(4)元素个数: std::tuple_size<>()

std::tuple<int, char, double> mytuple (10, 'a', 3.14); 
int count = std::tuple_size<decltype(mytuple)>::value;		//3

(5)元素类型: std::tuple_element<index, tuple>

std::tuple<int, std::string> third(9, std::string("ABC"));       
std::tuple_element<1, decltype(third)>::type  val_1;		// 得到元组第1个元素的类型,用元组第一个元素的类型声明一个变量

(6)拼接

std::tuple<char, int, double> first('A', 1, 2.2f);
auto second = std::tuple_cat(first, std::make_tuple('B', std::string("-=+")));
std::tuple<char, int, double, char, std::string> third = std::tuple_cat(first, std::make_tuple('B', std::string("-=+")));

(7)Qt中的实际应用
实际应用:

#include <tuple>
#include <QVector>
std::tuple<quint16, quint16, quint16, QVector<quint16>, QVector<quint16>> myFunction()
{quint16 data1 = 10;quint16 data2 = 20;quint16 data3 = 30;QVector<quint16> array1{1, 2, 3};QVector<quint16> array2{4, 5, 6};return std::make_tuple(data1, data2, data3, array1, array2);
}
int main()
{auto result = myFunction();quint16 returnedData1 = std::get<0>(result);quint16 returnedData2 = std::get<1>(result);quint16 returnedData3 = std::get<2>(result);QVector<quint16> returnedArray1 = std::get<3>(result);QVector<quint16> returnedArray2 = std::get<4>(result);// 使用返回的数据进行后续操作...return 0;
}

这篇关于现代C++、STL、QTL的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365645

相关文章

使用Python实现PDF与SVG互转

《使用Python实现PDF与SVG互转》SVG(可缩放矢量图形)和PDF(便携式文档格式)是两种常见且广泛使用的文件格式,本文将详细介绍如何使用Python实现SVG和PDF之间的相互转... 目录使用工具使用python将SVG转换为PDF使用Python将SVG添加到现有PDF中使用Python将PD

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

MySQL表的CURD使用

《MySQL表的CURD使用》文章主要介绍了MySQL数据库操作的基本方法,包括创建表、插入数据、查询数据、更新数据和删除数据等,涵盖了表结构设计、数据插入、查询条件、排序、分页、更新和删除操作,以及... 目录一、Create1.1单行数据+全列插入1.2多行数据+指定列插入1.3插入否则更新主键冲突1.

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结