C/C++头文件汇总

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

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

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

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

//#define NDEBUG

#include
#include

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,程序正常运行:
C/C++头文件汇总_第1张图片
当输入被除数b=0时,抛出错误信息:
C/C++头文件汇总_第2张图片
当然,如果没有assert,程序不报错,但会出现结果错误的情况:
C/C++头文件汇总_第3张图片
此外还可以判断malloc分配内存失败,返回NULL,assert可以用于检测指针是否NULL

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

#include
#include

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:调整控制格式,常用函数有:

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

示例:

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

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

#include
#include
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
#include
#include
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
#include
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:

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

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

#include
#include
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,他就是运算符~,可以按位取反。( 狗头

#includeSTL对双端队列的实现,也是很好用的一个数据结构,主要函数:
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
#include
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:链表结构,快速的插入和删除操作,随机访问却比较慢,主要函数:
push_back():在后面插入数据。
push_front():在前面插入数据。
front():返回第一个数据。
back():返回最后一个数据。
pop_back():删除最后一个元素。
pop_front():删除第一个元素。
size():返回元素个数。
sort():排序。
reverse():反转。
示例:

#include
#include
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;
}

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

#include
#include
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;
}

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

#include
#include
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;
}

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

#include
#include
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;
}

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

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

#include
#include
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;
}

你可能感兴趣的:(ACM,c语言,c++,开发语言,数据结构,算法)