在用c++模板类的时候,有段代码是这样的,不太明白里边的make_pair(34,&i)中的&i是

在用c++模板类的时候,有段代码是这样的,不太明白里边的make_pair(34,&i)中的&i是干嘛的?

第1个回答  2014-05-07
C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象
class
pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/va
lue)的成对元素。
pair被定义为struct,因此可直接存取pair中的个别值.
两个pairs互相比较时, 第一个元素正具有较高的优先级.
例:
namespace std{
template <class T1, class T2>
bool operator< (const pair<T1, T2>&x, const pair<T1, T2>&y){
return x.first<y.first || ((y.first<x.first)&&x.second<y.second);
}
}
make_pair():
无需写出型别, 就可以生成一个pair对象
例:
std::make_pair(42, '@' );
而不必费力写成:
std::pair<int, char>(42, '@' )
当有必要对一个接受pair参数的函数传递两个值时, make_pair()尤其显得方便,
void f(std::pair<int, const char*>);
void foo{
f(std::make_pair(42, '@' )); //pass two values as pair
}
1 pair的应用
pair 是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个 函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
2 make_pair函数
template pair make_pair(T1 a, T2 b) { return pair(a, b); }
很 明显,我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。灵活度也带来了一些问题如:
std::pair<int, float>(1, 1.1);
std::make_pair(1, 1.1);
是不同的,第一个就是float,而第2个会自己匹配成double。

在用c++模板类的时候,有段代码是这样的,不太明白里边的make_pair(34,&...
std::make_pair(1, 1.1);是不同的,第一个就是float,而第2个会自己匹配成double。

C++ 语言中 pair 的常见用法详解
在C++编程中,pair是一种实用数据结构,它在需要将两个元素组合成一个单元但又不想创建复杂结构体时显得尤为便利。pair本质上是一个内部包含两个元素的复合类型,其类型是可自定义的,如代码所示:首先,引入头文件#include "pair",并使用std命名空间,这样就可以直接使用pair了。通常,map头文件会自动...

C++里面make_pair是干什么用的???它跟pair有什么关系??还有STL里面的ma...
std::pair是二元组类模板,就是表示两种相互关联的事物。make_pair实际上是一个创建二元组的便利函数模板,这里用到了C++函数模板的模板参数可省略的特性,不使用这个函数模板的话,每次你要创建一个二元组必须写明模板参数。如:std::pair<char, int> a( 'a', 97 );make_pair( 'a', 97 );

C++ 语言中 pair 的常见用法详解
在C++语言中,pair是一个实用的工具,它允许我们组合两个元素为一个整体,而无需定义一个新的结构体。pair实际上是一个内部包含两个元素的结构体,这两个元素的类型可以自行指定。例如:要使用pair,首先需要包含头文件<iostream>,并使用命名空间std。然后就可以使用pair了。pair有两个参数,分别代表fir...

C++ vector中使用pair 及 pair的基本用法总结(转)
还可以利用make_pair创建新的pair对象:在某些清况函数会以pair对象作为返回值时,可以直接通过std::tie进行接收。比如:STL中map通过键-值的形式保证一一对应关系,而multimap则可以出现一对多的关系,这两种数据类型在存储数据时,会根据pair<>的first成员进行排序,不同的是前者将不会插入对first成员重复...

关于c++中的CTRL+Z的问题(附上代码)
你可以输入一个不是英文字母的字符作为结束标志,也可以事先要求用户输入字符串的长度。。。

...int,vector<类> > 如何用make_pair()给该容器插入元素
这位同学您好!你声明的map是map< int,vector<ID_Card> > data_m,而插入的对象则是一个(int, ID_Card),并不是(int, vector<ID_Card>),所以出现错误。可以修改map的声明为map<int, ID_Card> data_m;应该就可以了。希望能够帮到你。

c++中pair的用法是怎样的?
pair<double,int> p;2、应用:如果一个函数有两个返回值 的话,如果是相同类型,就可以用数组返回,如果是不同类型,就可以自己写个struct ,但为了方便就可以使用 c++ 自带的pair ,返回一个pair,其中带有两个值。除了返回值的应用,在一个对象有多个属性的时候 ,一般自己写一个struct ,如果就...

C++中pair的用法及其作用?
一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转 ...参考资料:<a href="http:\/\/www.javaeye.com\/wiki\/topic\/508417" target="_blank" rel="nofollow noopener">http:\/\/www.javaeye.com\/...

如何用c++做一个计算器,能连续加减乘除的,不需要界面,最好能是用while...
str = s[i++] + '\\0'; v.push_back(make_pair<int, string> (1, str)); } else if (s[i] == ')') { str = s[i++] + '\\0'; v.push_back(make_pair < int, string>(2, str)

相似回答