1、include<bits/stdc++.h>
这个头文件包含以下等等C++中包含的所有头文件
1 |
|
2、C++中指针
必须实例化new() ,且用->访问元素,对象用.访问元素
3、C++中数组
C求数组长度
1.使用sizeof(array) / sizeof(array[0]),
在C语言中习惯上在使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。
2.char array[n];则可以使用strlen(array)获取数组的长度;
3.对于一个一维动态数组,可以使用.size()函数来获取数组的个数。
4.指针指向的数组,不好求,可以尝试
数组整体赋值
char buffer[4];
memset(buffer,0,sizeof(char)4)
但
int q=new int [n];
memset(q,0,n*sizeof(int));
错误
数组输入输出问题
输入时可能遇到了一种情况,一直输入,然后回车时,结束输入,运行后面的代码,直接上代码了,逻辑相当简单。
1 | if(getchar()=='\n') //遇回车结束 |
#####
C++求绝对值
1 | include <stdlib.h> |
#####
5、C++中String
首先要使用string数据类型,需要引入头文件 #include,注意不是string.h头文件。
CString、string和string.h这几个区别:
CSting:CString是MFC或者ATL中的实现,是MFC里面封装的一个关于字符串处理的功能很强大的类,只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的string类了。在MFC中使用不需要自己加,但在另外的程序中需要加入#include。
string:string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,已经纳入C++标准之中。它和CString有本质的区别。
string.h:C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等,这个头文件跟C++的string类半点关系也没有,所以 并非 <string.h>的“升级版本”,他们是毫无关系的两个头文件。
综上,cout函数重载的是string类库中的string类型,而不是CString或string.h中的。
3.string类型的读入:
1 | cin>>s; //不能读入空格,以空格、制表符、回车符作为结束标志 |
4.求string类型的长度:
int len=s.size(); 或者 int len=s.length();
两种方法是等价的
5.求string类型下标为i的字符:
s[i] 或 char c=s.at(i)
6.查找t是否为s的子串:
s.find(t);
如果t是s的子串则返回首次匹配的位置,否则返回 string::npos 或 -1 //重点
7.字符数组转string类型:
1 | 1.向构造函数传入c字符串创建string对象: |
前两种是运用构造函数直接创建一个内容与c字符串一致的string对象;第三种是c++标准库编写的string类的内部重载了赋值运算符,使之能够以c字符串作为右操作数对string对象进行赋值,使string对象的内容与c字符串一致。
8.string类型转字符数组:
1 | strcpy(str,s.c_str()); |
需要引用string.h头文件,str为char数组,s为string类型
9.将C++的string,转换成char* 的字符串
我们经常会使用C和C++的混合编程,在某些情况下,需要将C++的string,转换成char* 的字符串。下面说两种可行的方法,作为总结。
1.data();
1 | string str="abc"; |
2.c_str();
1 | string str="adcd"; |
9.两个string比较大小:
if(s1<s2); 或 s1.compare(s2);
相等时返回0;s1>s2时返回1,s1<s2时返回-1
10.两个string连接:
s1=s1+s2; 或 s1.append(s2);
11.对string类型数组排序
1 | string s[100]; |
其中sort函数为C++ STL中提供的快速排序函数。
12.C++ 中有大量的函数用来操作以 null 结尾的字符串
序号 | 函数 | 功能 |
---|---|---|
1 | strcpy(s1,s2) | 复制字符串 s2 到字符串 s1 |
2 | strcat(s1,s2) | 连接字符串 s2 到字符串 s1 的末尾 |
3 | strlen(s1) | 返回字符串 s1 的长度 |
4 | strcmp(s1,s2) | 返回s1与s2的比较结果 |
5 | strchr(s1,ch) | 返回一个指针,指向字符串s1中字符ch的第一次出现的位置 |
6 | strstr(s1,s2) | 返回一个指针,指向字符串s1中s2的第一次出现的位置 |
13.C++ 标准库提供了 string 类
支持上述所有的操作,另外还增加了其他更多的功能
- append() – 在字符串的末尾添加字符
- find() – 在字符串中查找字符串
- insert() – 插入字符
- length() – 返回字符串的长度
- replace() – 替换字符串
- substr() – 返回某个子字符串
14.刷题中遇到的一些技巧
输入:
scanf和cin都是读到空白结束,尽量使用scanf和gets代替cin。
while (scanf(“%d%d”,&a,&b)!=EOF) 代替 while (cin>>a>>b)
输出:
注意大小写,换行,尽量用printf代替cout。
printf(“%d\n”, a + b) 代替 cout<<a + b<<endl;
用getline读取整行文本
string line:
while(getline(cin,line))
cout<<line<<endl;
最后一个空格问题
if(i!=n-1)//最后一个元素不再输出空格
{
putchar(‘ ‘);
}
EOF问题
//C语法格式:
while(scanf(“%d%d”,&a,&b) != EOF)
{ …. }
//C++语法格式:
while( cin>> a >> b )
{ …. }
输入是一整行的字符串,本类的输入方式如下:
C语法:
char buf[20];
gets(buf);
C++语法:
char buf[ 255 ];
cin.getline( buf, 255 );
有时候int型不够用,可以用long long或int64型(两个下划线)。Int到2亿多
值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。
printf(“%I64d”,a); //__int64 一般VC编译器使用
printf(“%lld”,a); //long long 一般g++编译器使用
避免每次输入用例
freopen(“fin.txt”,”r”,stdin);
遇回车结束
if(getchar()==’\n’) //遇回车结束
break;
素数表生成
prime[j*i]={1};//不行
for(int i=2;i*i<500000;i++)
{
for(int j=2;j*i<500000;j++)
{
prime[j*i]=0;
}
}
绝对值与取整
int abs(int i) 返回整型参数i的绝对值
double fabs(double x) 返回双精度参数x的绝对值
使用floor函数。floor(x)返回的是小于或等于x的最大整数。
如: floor(10.5) == 10 floor(-10.5) == -11
使用ceil函数。ceil(x)返回的是大于x的最小整数。
如: ceil(10.5) == 11 ceil(-10.5) ==-10
子串查找
s.find(t);//如果t是s的子串则返回首次匹配的位置,否则返回 string::npos 或 -1 //重点
数组整体赋值
char buffer[4];
memset(buffer,0,sizeof(char)4)
Find函数
vector::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3
if ( result == L.end( ) ) //没找到
表示坐标
typedef pair<int,int> P;
//P(sx, sy)
//p.first == gx && p.second == gy
INT_MAX,INT_MIN 这就是最大值和最小值