c++常用备忘(持续更新)

1.string

1.1 string和int互转

int转string用to_string(int)
    s+=to_string(root->val);
string转int用atoi(string.c_str())
    res += atoi(s.c_str());

1.2 string输入

#include<iostream>
string str;
getline(cin, str);//读入整行

注:可以用cin>>str; 但是需要注意的一点是这种情况下遇到空白字符会停止!

参考:
C++中string类型的初始化与赋值 - Fisher的博客 - CSDN博客
https://blog.csdn.net/qq_34266990/article/details/78630317

2. 头文件limits.h

include<limits>

CHAR_BIT, CHAR_MAX, CHAR_MIN, SCHAR_MAX, SCHAR_MIN, 0,UCHAR_MAX,SHRT_MAX, SHRT_MIN, USHRT_MAX, INT_MAX, INT_MIN, UINT_MAX, LONG_MAX, ULONG_MAX, LLONG_MAX, LLONG_MIN, ULLONG_MAX

4.数组定义

维数是常量

  • 一维数组
int a[3]={1,2,3};
  • 二维数组
int a[2][2]={{1,2},{3,4}};

维数是变量、

参考 https://www.cnblogs.com/yuanxiaohui-blog/p/4837037.html

  • 一维数组
    用new来申请num个int类型的空间,然后返回那段空间的首地址,再赋给array。可见array是一个int类型的指针,指向那段空间的首地址。
int* array=new int[num];
delete[] array;
  • 二维数组
    把二维数组理解成为很多一维数组的集合
  int num = 3;
  int** array = new int*[num];//申请int*类型数组的内存空间,赋值给(int*)*类型的array
  for(int i=0; i<num; ++i) {
    array[i] = new int[num];//一维数组的动态申请,分别给int*类型的数组申请空间,
  }
 
  for(int i=0; i<num; i++) {
    delete[] array[i];
  }
  delete[] array;

最简单:还是用vector,也不用delete释放内存

vector<int> f(n+1);//定义长度为n+1的vector
vector<int> v(n,1);//数组长度为n,初始化每个元素均为1
vector<vector<int> > array(row,vector<int>(column));  

6.int *赋值

在剑指offer遇到的题目,返回2个参数,1个
是bool类型,在输出return中体现;另外1个是int *类型,在输入中的 duplication体现,要求将重复数number[i]存进这个数组:

duplication[0]=number[i]

7.空指针nullptr

空指针标识(nullptr)(其本质是一个内置的常量)是一个表示空指针的标识,它不是一个整数。这里应该与我们常用的NULL宏相区别,虽然它们都是用来表示空置针,但NULL只是一个定义为常整数0的宏,而nullptr是C++11的一个关键字,一个内建的标识符。
nullptr和任何指针类型以及类成员指针类型的空值之间可以发生隐式类型转换,同样也可以隐式转换为bool型(取值为false)。但是不存在到整形的隐式类型转换。
有了nullptr,可以解决原来C++中NULL的二义性问题
举例:剑指offer链表中倒数第k个节点

		while (pListHead != nullptr){//这里如果用!pListHead 则报错
			len++;
			stk.push(pListHead);
			pListHead = pListHead->next;
		}

注意:链表节点如果是nullptr是没有next指针的,必须new一个ListNode才有next指针!!举例:reverse-linked-list-ii_牛客网

9. C/C++ &与&& |与|| 的区别

&&是逻辑与,||是逻辑或,&是按位与,|是按位或
参考:https://www.cnblogs.com/kuihuayou/p/7365075.html

10. 无符号类型

类型标识符字节数数值范围
无符号整型unsigned[int]40~4294967295
无符号短整型unsigned short[int]20~65535
无符号长整型unsigned long[int]40~4294967295
无符号字符型unsigned char10~255
	unsigned int a = 0;
	cout << a - 1 << endl;//输出结果:4294967295

11. map

11.1 map遍历

    map<int,int> mp;
    int key,val;
    while(cin>>key>>val){
        mp[key]+=val;
    }
    for(auto m:mp)
        cout<<m.first<<" "<<m.second<<endl;

11.2 某个key是否存在

1、count函数

count函数用于统计key值在map中出现的次数,map的key不允许重复,存在返回1,不存在返回0

mp.count(key) == 0

2、find函数
如果key存在,则find返回key对应的迭代器,如果key不存在,则find返回尾后迭代器 .end()

mp.find(key) == mp.end()

12. 输入输出

12.1 保留几位小数

使用C流,printf()函数可以很好的保留小数位,

printf("%.1f", a);//不设定宽度,保留1位小数
printf("%10.4f", a); //总宽度为10小数位位4

12.2 读取包含空格的字符串

#include<iostream>
string str;
getline(cin, str);//读入整行

13 判断一个数是否为整数

对于输入的double a;使用floor(a+0.5) == a来判断即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值