STL之pair及其非成员函数make_pair()】的更多相关文章

std::pair是一个结构模板,提供了一种将两个异构对象存储为一个单元的方法. 定义于头文件 <utility> template< class T1, class T2 > struct pair; 成员类型 Definition   成员对象 Type first_type T1         First T1 second_type T2   Second T2 1.定义(构造): pair<int, double> p1; //使用默认构造函数 pair&l…
http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621.htm 头文件  : <utility> pair 的  <.>.<=.>=.==.!= 的比较规则  :  先比较first,first相等时再比较second   (可以通过重载这几个运算符来重新指定自己的比较逻辑) pair的初始化:   pair<strin…
以pass-by-reference-to-const 替换pass-by-value 考虑以下class继承体系 class Person { public: Person(); // parameters omitted for simplicity virtual ~Person(); // see Item 7 for why this is virtual ... private: std::string name; std::string address; }; class Stud…
这个条款可以看成是条款24的续集,我们先简单回顾一下条款24,它说了为什么类似于operator *这样的重载运算符要定义成非成员函数(是为了保证混合乘法2*SomeRational或者SomeRational*2都可以通过编译,2不能同时进行隐式类型转换成某个Rational,再作this用). 所以我们一般将之定义成友元函数,像下面这样: class Rational { private: int numerator; int denominator; public: Rational(,…
在C++中,static有一个感觉被较少提及的用法:修饰非成员函数,这个用法实际是从C语言继承来的.其作用是表明这个函数只在当前编译单元中有效.这就使这个函数的所有引用在编译时就可以全部确定,无需进入链接阶段,链接器没有机会看到这个函数相关的一切符号,无论导入还是导出(理论上,实际编译器如何处理这个事情可能不尽相同,未作深入研究).即使多个编译单元都包含相同的signature相同名字的函数,链接器也不会报错或合并符号. 比如以下代码: // main.cpp void foo(); void…
1. 将需要隐式类型转换的函数声明为成员函数会出现问题 使类支持隐式转换是一个坏的想法.当然也有例外的情况,最常见的一个例子就是数值类型.举个例子,如果你设计一个表示有理数的类,允许从整型到有理数的隐式转换应该是合理的.在C++内建类型中,从int转换到double也是再合理不过的了(比从double转换到int更加合理).看下面的例子: class Rational { public: Rational(, // ctor is deliberately not explicit; ); //…
1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例.在继续之前建议你先回顾一下这个例子,因为这个条款的讨论是对它的扩展,我们会对Item 24的实例做一些看上去无伤大雅的修改:对Rational和opeartor*同时进行模板化: template<typename T> class Rational { public: Rational(, /…
#include<iostream> #include<algorithm> #include<cstring> #include<cstdlib> using namespace std; //创建对组 void test01(){ /*方法一:*/ pair<,); cout<<pair1.first<<" "<<pair1.second<<endl; /*方法二:*/ pair&…
1 通用的search方法 STL在实现对特定key值的查找时,并没有採用通用的方法: BRTreeNode * rb_tree_search(RBTreeNode * x, int key){ while(x ! = NULL && x->key != key){ if( x->key > key){ x = x ->left; }else{ x = x->right; } } return x; } 假设rb_tree树中同意多个同样的key同一时候存在.…
大纲: 1.成员函数和非成员函数 2.详细解释 3.总结 4.参考   1.成员函数和非成员函数   其实简单来说成员函数是在类中定义的函数,而非成员函数就是普通函数,即不在类中定义的函数,其中非成员函数比较典型的是友元函数.   2.详细解释   成员函数是类定义的一部分,通过特定的对象来调用.成员函数可以隐式访问调用对象的成员,而无须使用成员操作符. 友元函数不是类的组成部分,因此被称为直接函数调用.友元函数不能隐式访问类成员,而必须将成员操作符用于作为参数传递的对象.   3.总结   1…