C/C++常用库函数总结

1.isalpha、islower、isupper、isalnum、isblank、isspace这些函数都在(即C语言中的<ctype.h>)的头文件里面,
总的来说就是:
isalpha (字母,包括大写、小写)
islower(小写字母)
isupper(大写字母)
isalnum/isdigit(字母大写小写+数字)
isblank(space和\t)
isspace(space、\t、\r、\n)
2保留小数精确位.

setprecision的头文件为:#include <iomanip>

会自动四舍五入~
setprecision(n)表示显示n个有效数字
fixed连用可以控制小数点后面输出的位数

cout << setprecision(2) << 1.251 << endl; // 输出为1.3
cout << fixed << setprecision(2) << 1.236 << endl; // 输出为1.24

3.判断两个vector是否相等~直接用“==”呀~
如果vector里面的元素类型是简单类型(内置类型),可以直接使用“==”或者“!=”进行比较。
甚至可以使用“<=” “<” “>=” ">"比较两个vector大小:按照字典序排列。
4.string中size和length区别
size() 一般用作返回容器大小的方法
length() 一般用作返回一个序列的长度
但是无论用size还是length,返回的结果都是一样的~
5.string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf
一、string转化为数字
1.使用stoi

string str = "123";
int a = stoi(str);
stoi如果是非法输入:
1.会自动截取最前面的数字,直到遇到不是数字为止
    (所以说如果是浮点型,会截取前面的整数部分)
2.如果最前面不是数字,会运行时发生错误
stod如果是非法输入:
 1.会自动截取最前面的浮点数,直到遇到不满足浮点数为止
 (所以说如果是浮点型,会截取前面的整数部分)
 2.如果最前面不是数字或者小数点,会运行时发生错误
 3.如果最前面是小数点,会自动转化后在前面补0
相应的还有:
stof(string to float) 
stold(string to long double)
stol(string to long)
stoll(string to long long)
stoul(string to unsigned long)
stoull(string to unsigned long long)

2.使用stringstream

stringstream在sstream头文件中
string str = "1234";
stringstream stream;
stream << str;
int a;
stream >> a;
/*
如果转int是非法输入:
1.会自动截取最前面的数字,直到遇到不是数字为止
    (所以说如果是浮点型,会截取前面的整数部分)
2.如果最前面不是数字,会转化为整数0
*/
/*
 如果转double是非法输入:
 1.会自动截取最前面的浮点数,直到遇到不满足浮点数条件为止
 2.如果最前面不是数字或者小数点,会转化为整数0
 3.如果最前面是小数点,会转化为浮点数后在前面自动补0
 */
/*
其他数字类型也可以转化
*/

3.如果使用的不是string类,而是字符数组char c[]
3.1使用 sscanf

char c[50] = "123";
int a;
sscanf(c, "%d", &a); // 不要忘记 “&”
int b = 567;
sprintf(c, "%d", b);
/*
sscanf将字符数组转换为数字,输入到数字变量中
sprintf将数字转换为字符数组,输出到字符数组变量中
*/

3.2使用 atoi / atol / atoll

char c[50] = "123";
int a = atoi(c);

二、数字转化为string
1.使用to_string

int a = 123;
string s = to_string(a);

2.使用stringstream

stringstream stream;
string str;
int a = 123;
stream << a;
stream >> str;

3.如果是字符数组(使用sprintf)

    char c[50] = "123";
    int a;
    sscanf(c, "%d", &a); // 不要忘记 “&”
    int b = 567;
    sprintf(c, "%d", b);

6.双端队列
在头文件: #include < deque >
常用方法:
deque a(10); //创建一个有10个元素双端队列a,初始值都为0
a.push_front(0);//在头部加入数据0
a.push_back(11);//在尾部加入数据11
a.pop_front();//在头部删除数据
a.pop_back();//在尾部删除数据
a.resize(num);//重新指定队列的长度
a.size() //返回容器中实际数据个数
a.max_size() //返回容器中最大数据的数量
可以像使用数组一样输入或输出a[i]
7.栈
栈的常用操作函数:
top()
push()
pop()
size()
empty()
8.映射
map提供了“[]”运算符,使得map可以像数组一样使用
所以map也称为“关联数组”
map就是从键(key)到值(value)的映射。
例如可以用一个map<string, int> month_name 来表示“月份名字到月份编号”的映射
然后用month_name[“July”] = 7 这样的方式来赋值
map的基本操作函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count(elem) 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
9.集合
方法:
begin() 返回指向第一个元素的迭代器
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 如果集合为空,返回true(真)
end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
equal_range() 返回集合中与给定值相等的上下限的两个迭代器
erase() 删除集合中的元素
find() 返回一个指向被查找到元素的迭代器
get_allocator() 返回集合的分配器
insert() 在集合中插入元素
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
key_comp() 返回一个用于元素间值比较的函数
max_size() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合中最后一个元素的反向迭代器
rend() 返回指向集合中第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合变量
upper_bound() 返回大于某个值元素的迭代器
value_comp() 返回一个用于比较元素间的值的函数
10.不定长数组
vector是一个模板类 所以使用时要用vector< int > a 或者 vector< double> b这样的方式来声明一个vector
vector< int>是一个类似于int a[]的整数数组,而vector< string>是一个类似于string a[]的字符串数组
clear()清空
resize()改变大小
push_back()在尾部添加元素
pop_back()在尾部删除元素
empty()测试是否为空
vector之间可以直接赋值或者作为函数的返回值
push_back()和pop_back()无需改变数组长度,自动会增加和减小数组长度
11.max函数|C++返回数组中的最大值——max_element函数
在algorithm头文件中,返回最大数的迭代器

int a[5] = {0, 3, 9, 4, 5};
int *b; 
b = max_element(a, a+5);
cout << *b;

12.cin.getline()、getline()、gets()、cin.get(),getchar()的区别

char str[20];
cin.getline(str,20);//接受一行字符串,可以接受空格
cin.getline(str,20,'#');//接受一行字符串,可以接受空格,遇到#结束
string s;
getline(cin,s);//接受一行字符串,可以接受空格
//getline()和cin.getline()很类似,cin.getline()属于istream流,需要包含头文件<iostream>
//而getline()属于string流,需要包含头文件<string>,是不一样的两个函数

char str[20];
gets(str);//接收一行字符串到字符数组里面,可接受空格
char ch;
cin.get(ch);//用来接收一个字符
char str[20];
cin.get(str, 20);//接收一行字符串,可以接收空格
char ch;
ch = getchar();//不能写成getchar(ch)

12.如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、unordered_map、unordered_set、auto
如果想要在Dev-Cpp里面使用C++11特性的函数,比如刷算法中常用的stoi、to_string、unordered_map、unordered_set、auto这些,需要在设置里面让dev支持c++11~需要这样做~

在工具-编译选项-编译器-编译时加入这个命令:-std=c++11
13.max_element() 和 min_element()
max_element(a,a+n,cmp)/max_element(a.begin(),a.end(),cmp)
0. 在头文件 #include 中,返回的是迭代器,所以输出值的话要在前面加 *
1.第三个参数cmp可写可不写, max_element() 和 min_element() 默认是从小到大排列,然后 max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp 函数写的是从大到小排列,那么会导致 max_element() 和min_element() 的两个结果是对调的
2.可以用于 vector 或者 vector 等,也可以用于 int arr[4] 或者string arr[4] ,也可以用于结构体vector或者结构体数组~
14.accumulate函数的用法(STL)
在头文件#include < numeric> 里
主要是用来累加容器里面的值,比如int、string之类,可以少写一个for循环
比如直接统计vector v 里面所有元素的和:(第三个参数的0表示sum的初始值为0)
int sum = accumulate(v.begin(), v.end(), 0);
比如直接将vector v 里面所有元素一个个累加到string str中:(第三个元素表示str的初始值为空字符串)
string str = accumulate(v.begin(), v.end(), “”);
15.pair的用法 make_pair
pair<string, int> p1(“123”, 99), p2, p3;
p2.first = “abc”, p2.second = 2;
p3 = make_pair(“dce”, 1);
cout << p1.first << ” “ << p1.second;
pair<string, int> 相当于一个类型名称,如果要创建一个这个类型的数组,可以写vector<pair<string, int>>
16.binary_search()、upper_bound()、lower_bound() 二分查找
vector a = {0,1,2,2,3,4}; 使用前提是a已经是升序排列
cout << binary_search(a.begin(), a.end(), 3); // 找是否存在3,return false or true
auto it = upper_bound(a.begin(), a.end(), 2);// 从左到右返回第一个大于2的数字的地址
auto itt = lower_bound(a.begin(), a.end(), 2);// 从左到右返回第一个大于等于2的数字的地址, 找不到就返回a.end()
17.sort()、stable_sort()、partial_sort()、nth_element()、greater()、is_sorted()
algorithm头文件
sort(a, a+5); // 默认从小到大,int数组的排序
sort(v.begin(), v.end()); // vector数组排序
sort中使用的是快排和插排
stable_sort(v.begin(), v.end());
partial_sort(a, a+2, a+n); // 前2个数字将是正确顺序
partial_sort(v.begin(), v.begin() + 3, v.end()); // 对数组中元素部分排序,前3个将是正确顺序
nth_element(v.begin(), v.begin() + 6, v.end()); // 只有v[6]处放置的是正确的元素,其余不管~
sort(v.begin(), v.end(), greater()); // 从大到小排,第三个参数还可以写less,不写默认从小到大
is_sorted();//判断是否有序返回true,false
18.n_element的用法
n_element函数定义在头文件#include 里面,用法是:
n_element(v.begin(), v.begin() + k, v.end());
表示假设v排序后v[k]应该存储的值为v[k],则n_element函数的作用就是让v[k]这个值放在v[k]处,且让v[k]左边的数都小于v[k],v[k]右边的数都大于v[k]。但是不保证他们是有序的。(即v[k]处存放的是第k+1大的数,并且左边数都比他小右边数字都比他大,比如假设k = 1,表示将v[1]处设置为第2大的数)
也可以自定义添加cmp函数,表示方法为:
n_element(v.begin(), v.begin() + k, v.end(), cmp);
19.fill函数,fill与memset函数
memset函数
按照字节填充某字符
在头文件里面
因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-1同理,如果我们把每一位都填充“1”,会导致变成填充入“11111111”。
用法:memset(a,0,sizeof(a))
fill函数
按照单元赋值,将一个区间的元素都赋同一个值
在头文件里面
而fill函数可以赋值任何,而且使用方法特别简便:
例如int数组:fill(arr, arr + n, 要填入的内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值