python生成stl文件,python中的st
您还将了解pair对象如何封装关键帧及其相关对象,以及pair对象如何表示地图容器中的元素。通常,pair对象可以封装任何类型的对象,并生成所需的pair对象。包含数组对象或数组对的向量容器。例如,pair可以封装两个序列容器或两个序列容器的指针。Pair模板是在实用程序头文件中定义的,如果只使用pair对象而不使用map,就可以包含它。
操作对
考虑到pair是一个相对简单的模板类型,只有两个公共数据成员,第一个和第二个。令人惊讶的是,各种配对都可以。我知道如何使用first和second创建对象。
像右值引用参数一样,pair也有许多版本的引用参数,多个版本的右值引用参数可以用来隐式地将参数转换为所需的类型。例如,使用以下四种不同的方法来创建pair对象:
std:string s1 {test"},S2 { that };
STD:pair:string STD:3360 string my _ pair { S1,S2 };
STD:3360 pair:string STD:3360 string your _ pair { STD:3360 string { test },STD3360:string{that}
STD:3360 pair:string STD:3360 string his _ pair { test ,STD 33603360 string { that };
STD:pair:string STD:3360 string her _ pair { test , that };
第一个pair构造函数复制所有参数的值,第二个移动参数的值,第三个将第一个参数传递给string进行隐式转换,最后一个构造函数将这两个参数隐式转换为string对象。因为此构造函数具有正确值引用参数的版本,所以任何一个或两个模板类型参数都是unique_ptr。
make_pair函数模板是一个辅助函数,它生成并返回一个pair对象。您可以生成前面代码块的pair对象,如下所示:
automy _ pair=STD:3360 make _ pair(S1,S2);
auto your _ pair=STD:3360 make _ pair(STD:3360 string { test },STD:string { that };
auto his _ pair=STD:make _ pair:string STD 3360:string( test ,STD 3360:string( that );
auto her _ pair=STD:make _ pair:string STD 3360:string( test , that );
前两条语句的函数模板的类型参数是由编译器估计的。最后两句,类型明确。如果在最后两条语句中忽略了模板类型的参数,则对象类型为pair和pair。
Pair对象也可以复制或移动其成员变量。例如:
STD:pair:string STD:3360 string new _ pair { my _ pair };//复制构造函数
标准:对:字符串标准:字符串
old _ pair { STD:3360 make _ pair(STD 33603360 string(his)、STD 3360:string(hers))};
Old_pair由pair类的move构造函数生成。
另一个pair构造器可以使用C 11中引入的机制,通过在适当的位置生成第一个和第二个对象来构建pair。T1和T2构造函数的参数作为元组参数传递给pair的构造函数。下一节描述如何使用tuple对象。以下是使用pair对象的示例:
STD:pair couple { STD:3360 piece _ construct,STD :3360 forward _ as _ tuple (jack),(Jones)
其中,pair构造函数的第一个参数是实用程序头文件中定义的piecewise _ construct类型的一个实例。这是用作标记或标签的空类型。这个piecewise _ constmct参数的唯一功能是区分调用这个构造函数和调用带有两个元组参数(通常用作第一个和第二个成对成员变量的值)的构造函数之间的区别
其中,构造函数的第二个和第三个参数指定了用于构建第一个和第二个对象的参数集。Forward_as_tuple()为
元组头文件中的函数模板。这里,使用其转发参数生成元组引用。这个pair的构造函数不常使用,但是它提供了一种独特的能力,可以在适当的位置为不支持复制或移动操作的T1和T2类型生成pair对象。
注意,如果参数是临时对象,forward_as_tuple()函数将生成一个由正确值引用的元组。例如:
int a {1},b { 2 };
const auto c=STD:forward _ as _ tuple(a,b);
这里C的类型是tuple,所以成员变量是引用。但是假设语句是这样写的:
const auto c=STD:forward _ as _ tuple(1,2);
这里C的类型是tuple,成员变量作为值引用。
如果成员变量可以复制和移动,pair对象支持复制和移动赋值。例如:
STD:pair:string STD:string old _ pair;//默认构造函数
STD:pair:string STD:string new _ pair { STD:string { his },STD:string { hers } };
旧对=新对;//复制赋值
new_pair=pair:字符串std:string
{std:string{these},STD:string { these } };//移动赋值
的默认pair构造函数生成old_pair及其成员变量,即空字符串对象,该对象为空字符串对象。子句3:将new_pair逐个成员地复制到old_pair中。第四条语句将pair对象的成员变量(赋值运算符的右操作数)移动到new_pair。
当一个pair对象包含不同类型的成员变量时,一个pair对象也可以赋给另一个pair对象,只要作为右操作数的pair对象的成员变量可以隐式转换为作为左操作数的pair对象的成员变量的类型。例如:
auto prl=std:make_pair(这些,那些);//类型对
STD:pair:string STD:string pr2;//类型对
pr2=prl//在这种情况下,OK
第一个和第二个prmember变量的类型是const char*。这个类型可以隐式转换为string,string是pr2成员变量的类型,所以可以成功赋值。如果不能隐式转换这些类型,则不能编译该赋值语句。
Pair对象有全套运算符==,=、=。这些运算符都可以正常使用。作为操作数的pair对象的类型必须相同,并且它们的成员变量必须以相同的方式进行比较。如果左右操作数的成员变量相等,则相等运算符返回true:
STD:pair:string STD:string new _ pair;
new _ pair.first= his
new _ pair.second= hers
if(new _ pair==STD:pair:string STD:string { his , hers})
std:cout Equality!\ n ;
new_pair的成员变量first和second被赋给右操作数中包含的字符串。如果pair对象相等,If语句将输出一些消息。当两个pair对象的任意一个或两个成员不相等时!=比较将返回true。
对于小于或大于比较,pair对象的成员变量按字典顺序进行比较。如果new_pair.first小于old_pair.first,则表达式new_pair
std:pair p1 {10,9 };
std:pair p2 {10,11 };
std:pair p3 {11,9 };
STD:cout:bool alpha p2 P3)“”(P3 p2)STD:endl;
第一次比较的结果为真,因为p1和p2的成员变量first相等,p1的成员变量second小于p2的成员变量second。
第二次比较的结果为假,因为p1的第一个小于p3的第一个。第三次比较的结果为真,因为p3的第一个大于p2的第一个。
Pair的成员函数swap()可以首先和其次与作为参数传入的另一个pair对象交换其成员变量。显然,参数必须是同一类型。这里有一个例子:
std:pair p1 {10,11 };
std:pair p2 {11,9 };
P1 . swap(p2);//p1={ll,9} p2={10/11}
如果swap()执行两次,对象将恢复到其原始值。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。