C/C++头文件汇总

ACM省赛推迟了,原因是主办方山大的疫情出了点状况。

深度学习一下C++的一些基础的东西,介绍学习一些C++的许多头文件。

想要了解C/C++常用函数,参考这篇:C/C++常用函数

传统的C和C++中的像特别熟悉的头文件iostream,stdio,stdlib,string,就不详细说了,还有做题用处不太大的像limits,time这些也不说了,传统的头文件介绍三个:
1、#include<cassert>:assert宏,用于软件的测试、调试、排错。例如,被除数不能为0,就可以这样检查:

//#define NDEBUG

#include<cstdio>
#include<cassert>

int main()
{
	double a,b;
	scanf("%lf%lf", &a, &b);
	printf("a=%f, b=%f\n",a,b);
	assert(b != 0);
	printf("%lf/%lf=%lf\n",a,b,a/b);
	return 0;
}

看这段代码,如果输入a = 6, b = 3,程序正常运行:
在这里插入图片描述
当输入被除数b=0时,抛出错误信息:
在这里插入图片描述
当然,如果没有assert,程序不报错,但会出现结果错误的情况:
在这里插入图片描述
此外还可以判断malloc分配内存失败,返回NULL,assert可以用于检测指针是否NULL

2、#include<cctype>:常用的函数有:
isalpha() 如果参数是字母,该函数返回真。
isdigit() 如果参数是数字(0~9),该函数返回true。
islower() 如果参数是小写字母,该函数返回true。
isupper() 如果参数是大写字母,该函数返回true。
tolower() 如果参数是大写字符,则返回其小写,否则返回该参数。
toupper() 如果参数是小写字母,则返回其大写,否则返回该参数。
如下代码:

#include<cstdio>
#include<cctype>

int main()
{
	char a1 = '1';
	char a2 = 'c';
	char a3 = 'A';
	
	if(isalpha(a2))
	printf("a2是字母.\n");
	else
	printf("a2不是字母.\n");
	
	if(isdigit(a1))
	printf("a1是数字.\n");
	else
	printf("a1不是数字.\n");
	
	if(islower(a2))
	printf("a2是小写字母.\n");
	else
	printf("a2不是小写字母.\n");
	
	if(isupper(a3))
	printf("a3是大写字母.\n");
	else
	printf("a3不是大写字母.\n");
	
	printf("%c\n",tolower(a3)); 
	printf("%c\n",toupper(a2));
	return 0;
}

3、#include<iomanip>:调整控制格式,常用函数有:

setw(n),setw表示预设的宽度
setfill(char c),setfill表示前边的空白填充
setbase(int n),setbase表示几进制输出
setprecision(n),setprecision表示输出几位浮点数

示例:

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	cout << setw(5) << 123.123 << endl;
	cout << setw(10) << 123.123 << endl;
	
	cout << setfill('%') << setw(10) << 123.123 << endl;
	
	cout << setbase(16) << setw(1) << 10 << endl;
	
	cout << setprecision(5) << 1.234567 << endl;
}

标准C++:比起传统的头文件,标准C++提供的头文件更加丰富,用处更加多彩。

我们来简单介绍一些这些头文件以及常用的函数:

#include<algorithm>:algorithm意为算法,是C++的标准模板库STL中最重要的头文件之一,提供大量基于迭代器的非成员模板函数。

其中函数特别好用,例如:
(1)reserve()反转,可以是数组,也可以是vector容器:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	reverse(a,a+10);
	for(int i=0;i<10;i++)
	cout << a[i] << " ";
	return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	vector<int> a;
	for(int i=0;i<10;i++)
	a.push_back(i);
	reverse(a.begin(), a.end());
	for(vector<int>::iterator it=a.begin();it!=a.end();++it)
	cout << " " << *it; 
	return 0;
}

(2)next_permutation(),返回大于等于当前序列的全排列:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10] = {1, 3, 5};
	cout << a[0] << " " << a[1] << " " << a[2] << endl;
	while(next_permutation(a, a+3))
	{
		cout << a[0] << " " << a[1] << " " << a[2] << endl;
	}
	return 0;
}

(3)sort()排序函数,这个不用的多说了吧,很高效好用的排序函数,再多说一点,默认升序排序,如果想要降序在第三个参数上写greater<int>:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10] = {1, 3, 5};
	sort(a,a+3,greater<int>());
	cout << a[0] << " " << a[1] << " " << a[2] << endl;
	return 0;
}

#include<bitset>:STL位集容器,主要函数:
bitset:可以把整数转换成为二进制数。
reset:清零所有二进制位。
set:把第几个字符改成0或1。
to_string:转换成字符串。
to_ulong:转换成无符号整数。
示例:

#include<iostream>
#include<bitset>
using namespace std;
int main()
{
	int a = 10;
	bitset<10>b(a);
	cout << b << endl;
	b.set(3,0);
	cout << b << endl;
	string str = b.to_string();
	cout << str << endl;
	int data = b.to_ulong();
	cout << data << endl; 
	b.reset();
	cout << b << endl;
	return 0;
}

#include<complex>:表示复数,括号里前后表示实部和虚部,可以进行复数的运算和比较。

#include<iostream>
#include<complex>
using namespace std;
int main()
{
	complex<double>z(2, 3);
	complex<double>z1;
	complex<double>z2(z);
	cout << z << endl;
	cout << z1 << endl;
	cout << z2 << endl;
	z.real(4);
	z.imag(5);
	cout << z << endl;
	cin >> z1;
	cout << z1 << endl;
	return 0;
}

!!再打complex时,发现一个关键字compl,他就是运算符~,可以按位取反。( 狗头

#include<deque>STL对双端队列的实现,也是很好用的一个数据结构,主要函数:
q.size():返回双端队列大小。
q.empty():返回双端队列是否为空。
q.clear():清空容器。
q[i]:像vector一样随机访问。
q.begin()/q.end():返回首迭代器/尾迭代器。
q.front()/q.back():返回队头/队尾元素。
q.push_front(x)/q.push_back():在队头/队尾插入元素x。
q.pop_front()/q.pop_back():弹出队头/队尾元素

#include<iostream>
#include<deque>
using namespace std;
int main()
{
	deque<int> q;
	q.push_front(1);
	q.push_back(2);
	q.push_front(3);
	cout << q[1] << endl;
	cout << q.size() << endl;
	cout << q.front() << endl;
	cout << q.back() << endl;
	q.pop_back();
	q.pop_back();
	q.pop_back();
	cout << q.size() << endl;
	return 0;
}

#include<list>:链表结构,快速的插入和删除操作,随机访问却比较慢,主要函数:
push_back():在后面插入数据。
push_front():在前面插入数据。
front():返回第一个数据。
back():返回最后一个数据。
pop_back():删除最后一个元素。
pop_front():删除第一个元素。
size():返回元素个数。
sort():排序。
reverse():反转。
示例:

#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int> a, b;
	cout << a.empty() << endl;
	a.push_back(1);
	a.push_back(3);
	a.push_front(5);
	cout << a.front() << endl;
	a.sort();
	cout << a.front() << endl;
	a.pop_front();
	cout << a.front() << endl;
	return 0;
}

#include<map>map容器,提供一对一的关联,主要函数:
count():判断某一键是否存在。
empty():判断map是否为空。
size():返回map中元素个数。
rbegin():返回一个指向map尾部的逆向迭代器
rend():返回一个指向map头部的逆向迭代器
反向遍历时,只需将it对应的begin和end换成rbegin和rend。

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<string, int> mp;
	mp["aaa"] = 100;
	mp["bbb"] = 200;
	mp["ccc"] = 300;
	
	for(map<string, int>::iterator it = mp.begin();it!=mp.end();++it)
	cout << (*it).first << ":" << (*it).second << endl;
	
	cout << mp.count("aaa") << endl;
	cout << mp.empty() << endl;
	cout << mp.size() << endl; 
	
	return 0;
}

#include<queue>STL提供的队列,也是很好用的数据结构,常用的函数:
push():元素入队。
pop():元素出队。
front():取对头元素。
back():取队尾元素 。
empty():判断队列是否为空。
size():返回队列的大小。
示例:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	cout << q.size() << endl;
	cout << q.front() << endl;
	q.pop();
	cout << q.front() << endl;
	q.pop();
	cout << q.front() << endl;
	q.pop();
	cout << q.empty() << endl;
	return 0;
}

#include<set>STL基于红黑树的集合数据结构,常用函数:
insert():插入元素。
count():返回元素出现的个数。
size():集合中元素个数。
empty():判断集合是否为空。

#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s;
	s.insert(3);
	s.insert(1);
	s.insert(5);
	cout << s.count(1) << endl;
	cout << s.size() << endl;
	cout << s.empty() << endl;
	for(set<int>::iterator it = s.begin();it!=s.end();++it)
	cout << *it << " ";
	return 0;
}

#include<stack>STL提供的栈的数据结构,主要函数。
push():元素入栈。
pop():元素出栈。
size():返回栈中元素个数。
empty():判断栈是否为空。
top():访问栈顶元素。
示例:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	cout << st.empty() << endl;
	cout << st.size() << endl;
	cout << st.top() << endl;
	st.pop();
	cout << st.top() << endl;
	st.pop();
	cout << st.top() << endl;
	st.pop();
	return 0;
}

#include<vector>容器,常用函数:
push_back():在数组最后插入一个数据。
size():返回数组数据个数。
empty():判断是否数组为空。
[i]:返回位置为i的元素。
b=a:给b容器赋值a。
b==a:判断是否数组内元素全相等。
示例:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> a;
	a.push_back(3);
	a.push_back(5);
	a.push_back(1);
	cout << a.size() << endl;
	cout << a.empty() << endl;
	cout << a[1] << endl;
	vector<int>b;
	if(a==b) cout << 1 << endl;
	else cout << 0 << endl;
	b = a;
	if(a==b) cout << 1 << endl;
	else cout << 0 << endl; 
	return 0;
}
  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
#include <assert h>     设定插入点 #include <ctype h>     字符处理 #include <errno h>     定义错误码 #include <float h>     浮点数处理 #include <fstream h>    文件输入/输出 #include <iomanip h>    参数化输入/输出 #include <iostream h>    数据流输入/输出 #include <limits h>     定义各种数据类型最值常量 #include <locale h>     定义本地化函数 #include <math h>      定义数学函数 #include <stdio h>     定义输入/输出函数 #include <stdlib h>     定义杂项函数及内存分配函数 #include <string h>     字符串处理 #include <strstrea h>    基于数组的输入/输出 #include <time h>      定义关于时间的函数 #include <wchar h>     宽字符处理及输入/输出 #include <wctype h>     宽字符分类 int spawnvpe int mode char pathname char argv[] char envp[] spawn函数族在mode模式下运行子程序pathname 并将参数 arg0 arg1 arg2 argv[] envp[] 传递给子程序 出错返回 1 mode为运行模式 mode为 P WAIT 表示在子程序运行完后返回本程序 P NOWAIT 表示在子程序运行时同时运行本程序 不可用 P OVERLAY表示在本程序退出后运行子程序 在spawn函数族中 后缀l v p e添加到spawn后 所指定的函数将具有某种操作能力 有后缀 p时 函数利用DOS的PATH查找子程序文件 l时 函数传递的参数个数固定 v时 函数传递的参数个数不固定 ">#include <assert h>     设定插入点 #include <ctype h>     字符处理 #include <errno h>     定义错误码 #include <float h>     浮点数处理 #include <fstream h>    文件输入/输出 #include <iomanip h& [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三元湖有大锦鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值