C++一些0002 for+define+typedef+:+pair +排列

C++

目录

C++

STL库函数bool next_permutation(),prev_permutation

abort()、exit()、atexit\atexit使用

pair

c++成员函数后面跟“:”表示的是赋值,这是c++的特性

typedef 用法

define 用法详解

1. 无参宏定义

2.有参宏定义


STL库函数bool next_permutation(),prev_permutation


next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。

这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件< algorithm >

和sort的参数一样,一般传两个参数,第一个是排列开始的地址,第二个是排列结束的下一个地址。
 

#include <iostream>
#include <algorithm>

using namespace std;
int main()
{
    int data[4]={5,0,2,4};
 
    do{
        for(int i=0;i<4;i++)
            cout<<data[i]<<" ";
        cout<<endl;
    }while(next_permutation(data,data+4));

    return 0;

}

#include <iostream>
#include <algorithm>

using namespace std;
int main()
{
    int data[4]={5,0,2,4};
    sort(data,data+4);  // 从小到大排序
    do{
        for(int i=0;i<4;i++)
            cout<<data[i]<<" ";
        cout<<endl;
    }while(next_permutation(data,data+4));

    return 0;

}



 

abort()、exit()、atexit\atexit使用

  • abort() 

立即终止当前进程,产生异常程序终止

进程终止时不会销毁任何对象

  • exit()

正常终止进程,并进行清理!

  •  atexit (_onexit, _onexit_m)

指定在程序终止之前执行的 exit-processing 函数。 在执行 exit-processing 函数之前不会销毁在调用 atexit 之前初始化的任何全局静态对象。

 

pair

  • pair是C++中一种模板类型。每个pair对象可以存储两个值,这两个值可以是不同的数据类型。存储的值可以是基本数据类型也可以是自定义数据类型。
  • #include <utility>
  • 定义构造函数

pair<T1, T2> p1;      //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1(v1, v2);  //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
make_pair(v1, v2);     // 以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型。
p1 < p2;          // 两个pair对象间的小于运算,其定义遵循字典次序:如 p1.first < p2.first 或者 !(p2.first < p1.first) && (p1.second < p2.second) 则返回true。
p1 == p2;         // 如果两个对象的first和second依次相等,则这两个对象相等;该运算使用元素的==操作符。
p1.first;          // 返回对象p1中名为first的公有数据成员
p1.second;         // 返回对象p1中名为second的公有数据成员

 

  •  vector的这种用法有点类似于map。与map不同的是:
    •     map会对插入的元素按键自动排序,而且不允许键重复。
    •     vector的这种用法不会自动排序,而且允许重复。
  •  两个值可以分别用pair的两个公有函数first和second访问

 

c++成员函数后面跟“:”表示的是赋值,这是c++的特性

A( int aa, int bb ):a(aa),b(bb)
{
}
相当于
A( int aa, int bb )
{
    a=aa;
    b=bb;
}

 

typedef 用法

任何声明变量的语句前面加上typedef之后,原来是变量的都变成一种类型不管这个声明中的标识符号出现在中间还是最后。

例如:

typedef int NUM;
NUM a = 10; //也可以写成NUM(a) = 10;

 

define 用法详解

1. 无参宏定义

#define  标识符  字符串

举例: MAXNUM就被简单的定义为99999

#define MAXNUM 99999

2.有参宏定义

C++语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。
对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。

 #define  宏名(形参表)  字符串

举例:

#define add(x, y) (x + y)
int main()
{
    cout << "1 plus 1 is " << add(1, 1.5) << ".\n";
    //输出“1 plus 1 is 2.5.”
    system("pause");
    return(0);
}

这个“函数”定义了加法,但是该“函数”没有类型检查,有点类似模板,但没有模板安全,可以看做一个简单的模板。define -CSDN

注意:该“函数”定义为(a + b),在这里加括号的原因是,宏定义只是在预处理阶段做了简单的替换,如果单纯的替换为a + b时,当你使用5 * add(2, 3)时,被替换为5 * 2 + 3,值为13,而非5 * (2 + 3),值为25。
 

c++11 for(auto a:b)

  • for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。
  • for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值