c++小知识点
基本数据类型
**对于整型来说:**绝对值在10^9
范围以内可以定义成int型,在10^18
范围以内定义成long long
型,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFiCpDIv-1592110805047)(https://s2.ax1x.com/2020/02/08/1RAEKs.png)]
注意:若long long
型赋值大于2^31-1
的初值,需要在初值后面加上LL,否则会编译错误
printf
输出格式
%md
不足m位的int
型变量以m位右对齐输出,%-md
以左对齐方式输出, 若数值大于m位,保持原样输出
%0md
变量不足时用0填补
%.mf
让浮点数保留m为小数
常用的math函数:头文件cmath
中
fabs(double x);//对double取绝对值
floor(double x);//对x向下取整
ceil(double x);//对x向上取整
pow(double r,double p);//r^p
sqrt(double x);//算数平方根
log(double x);//以自然对数为底的对数
sin(double x)、cos(double x)、tan(double x)//正弦、余弦、正切值
asin(double x)、acos(double x)、atan(double x)//反正弦、反余弦、反正切
round(double x);//对x四舍五入
注意:上面函数要求x
为double
型
头文件cctype
中的一些函数
总的来说常用的只有以下几个
isalpha
字母(包括大小写)
islower
(小写字母)
isupper
(大写字母)
isalnum
(字母大小写+数字)
isdigit
(检查是否为数字)
isblank
(space和\t
)
isspace
(space
、\t
、\r
、\n
)
tolower
(转为小写字母)
toupper
(转为大写字母)
string常用功能
https://zh.cppreference.com/w/cpp/string/basic_string
1、初始化
string s;//默认初始化,一个空字符串
string s1("ssss");//s1是字面值“ssss”的副本
string s2(s1);//s2是s1的副本
string s3=s2;//s3是s2的副本
string s4(10,'c');//把s4初始化,长度为10的 c的字符串
string s5="hiya";//拷贝初始化
string s6=string(10,'c');//拷贝初始化,生成一个初始化好的对象,拷贝给s6
//char cs[]="12345";
string s7(cs,3);//复制字符串cs的前3个字符到s当中
// string s8="asac";
string s9(s8,2);//从s8的第二个字符开始拷贝,不能超过s8的size
//string s10="qweqweqweq";
string s11(s10,3,4);//s11是s10从下标3开始4个字符的拷贝,超过s10.size出现未定义
//字符串中的find函数,若找不到字符,会返回string::npos,即是-1;
string s1=“hello,word";
if(s1.find(h)!=string:npos)
flag=1;
string 类提供了 6 种查找函数,每种函数以不同形式的 find 命名。
这些操作全都返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置;
或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。
s1.erase(4,1);//去除4位置上 一个字符
s1.erase(3);//从位置3开始去除字符到结尾
//在0位置插入len个'0'
s.insert(0,len,'0');
sort(s1.begin(),s1.end(),cmp);//给s1字符串中排序
2、数值转换:在头文件string中
|—
stoi(s,p,b)
把字符串s从p开始转换成b进制的int;|—
stol(s,p,b)
long;|—
stof(s,p)
float;|—
stod(s,p)
double
当然,也可以由其它类型转换成string类型(头文件)
to_string
3、函数
string s="ahahahhaaha";
s.length() s.size()//取串的长度
string s2=s.substr(4);//从下标4开始一直到结束
string s3=s.substr(5,3) //从下标5开始 截取3个字符
s.append(s2);//append()函数可以用来在字符串的末尾追加字符和字符串。由于string重载了运算符,也可以用+=操作实现
s.find("ha",3)//从位置3开始查找“ha”子串
s.find*()
s.compare(s2)//和strcmp函数一样,如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1
for的新的运用方式
int arr[4] = {0, 1, 2, 3};
for (int i : arr)
cout << i << endl; // 输出数组中的每⼀一个元素的值,每个元素占据⼀行,但是只能用于输出,而不能用于修改数组元素中的值
int arr[4]={0,1,2,3};
for(int &i:arr)
i=i*2; //利用引用可以修改数组中的值
c++的位运算
位于头文件bitset中
#include<iostream>
#include<bitset>
using namespace std;
int main(){
bitset<5> b("11");//表示五个二进制位
//初始化方式:
//bitset<5> b(u);u为unsigned int,如果u=1,则b的输出结果为00001
//bitset<8> b(s);s为字符串,如“1101”,b的输出结果为00001101
//bitset<5> b(s,pos,n);从字符串的s[pos]开始,N为长度
//注意,bitset相当于一个数组,但是它是从二进制的低位到高位存储的
//所以按照正常的输入方式与b的结果是相反的
cout<<b<<endl; // 如果bitset<5> b("11"); 则此处输出00011(即正常⼆二进制顺序)
for(int i = 0; i < 5; i++)
cout << b[i]; // 如果bitset<5> b("11"); 则此处输出11000(即正常⼆二进制顺序的倒
序)
cout << endl << b.any(); //b中是否存在1的⼆二进制位
cout << endl << b.none(); //b中不不存在1吗?
cout << endl << b.count(); //b中1的⼆二进制位的个数
cout << endl << b.size(); //b中⼆二进制位的个数
cout << endl << b.test(2); //测试下标为2处是否⼆二进制位为1
b.set(4); //把b的下标为4处置1
b.reset(); //所有位归零
b.reset(3); //b的下标3处归零
b.flip(); //b的所有⼆二进制位逐位取反
unsigned long a = b.to_ulong(); //b转换为unsigned long类型
return 0;
}
st(2); //测试下标为2处是否⼆二进制位为1
b.set(4); //把b的下标为4处置1
b.reset(); //所有位归零
b.reset(3); //b的下标3处归零
b.flip(); //b的所有⼆二进制位逐位取反
unsigned long a = b.to_ulong(); //b转换为unsigned long类型
return 0;
}