C++不同的头文件中各种函数的操作使用(长期更新,找到新的就补充进来)
一、万能头文件
#include <bits/stdc++.h>
万能头文件中包含的内容
// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
缺点
-
不是GNU C++库的标准头文件,在部分情况下会编译失败;
-
包含了很多不必要的东西,会大大增加编译时间,但不会影响运行时间。
二、 C++对数据的输入输出格式控制
2.1 C语言输出的控制(对齐+占位)
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
// 表示占8个字符的宽度,负号表示左对齐
print("%-8d",a);
return 0;
}
2.2 C++语言输出的控制(对齐+占位)
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a;
cin>>a;
// 表示占8个字符的宽度,left表示左对齐
cout<<setw(8)<<left<<a<<endl;
// 表示占8个字符的宽度,right表示右对齐
cout<<setw(8)<<right<<a<<endl;
return 0;
}
输出样例:八个字符的宽度,右对齐。
三、C++对浮点类型数据的操作
3.1 保留小数问题
#include<iomanip>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double number=3.1415926535;
// 四舍五入保留两位小数
cout<<fixed<<setprecision(2)<<number<<endl;
// 取整样例
double number1 = 2.8;
double number2 =-2.8;
// 向下取整
cout<<floor(number1)<<" "<<floor(number2)<<endl;
// 向上取整
cout<<ceil(number1)<<" "<<ceil(number2)<<endl;
// 四舍五入
cout<<round(number1)<<" "<<round(number2)<<endl;
return 0;
}
输出样例:保留两位小数
3.2 浮点数的精度操作
函数名称 | 函数说明 | 2.8 | -2.8 |
---|---|---|---|
floor | 不大于变量的最大整数(向下取整) | 2 | -3 |
ceil | 不小于变量的最小整数(向上取整) | 3 | -2 |
round | 四舍五入 | 3 | -3 |
四、C++中string的处理
4.1 普通的string读取是到空格结束的
#include<iostream>
#include<string>
using namespace std;
int main()
{
// 只能读取连续的字符串
// eg: asdfghjkl
string str;
cin>>str;
cout<<str<<endl;
return 0;
}
输出样例:输入Hello World,只输出Hello
4.2 getline读取一行
头文件
#include<string>
功能
1. getline(cin, str); // 读取一行,包括空格
2. getline(cin, str,':'); // 指定用":"作为界定符,读取":"之前的内容,默认的界定符是"\n"
3. getline可以用于检测空行,并作出处理。
#include<iostream>
#include<string>
using namespace std;
int main()
{
// 按行读取,有空格也能读入
// eg: hello world
string str;
getline(cin, str);
cout << str << endl;
return 0;
}
输出样例:输入Hello World,输出Hello World
4.3 大小写转换
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
string str;
cin >> str;
for (int i = 0; i < str.length(); i++) {
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = tolower(str[i]);
else if (str[i] >= 'a' && str[i] <= 'z')
str[i] = toupper(str[i]);
}
cout << str << endl;
}
输出样例:将输入的字符串中的内容,大写转换为小写,小写转换为大写。
五、算法头文件
#include<algorithm>
5.1 sort() 排序
sort(arr,arr+size); // 默认为升序
sort(zrr,arr+size,greater<int>()); // 为降序
#include<iostream>
#include<algorithm>
using namespace std;
bool compare1(int a, int b);
bool compare2(int a, int b);
void Print(int arr[], int size);
int main()
{
int arr[] = { 1,3,5,7,9,8,6,4,2 };
int size = sizeof(arr) / sizeof(arr[0]);
cout << "升序排列:" << endl;
sort(arr,arr+size);
Print(arr, size);
cout << "降序排列:" << endl;
sort(arr, arr + size, greater<int>());
Print(arr, size);
cout << "========================================" << endl;
cout << "用自定义比较器来做比较" << endl;
sort(arr, arr + size, compare1);
cout << "升序排列:" << endl;
Print(arr, size);
sort(arr, arr + size, compare2);
cout << "降序排列:" << endl;
Print(arr, size);
return 0;
}
bool compare1(int a, int b)
{
return a < b;
}
bool compare2(int a, int b)
{
return a > b;
}
void Print(int arr[],int size)
{
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
输出样例:输入一个int类型的数组,用algorithm库中的sort函数实现升序和降序的排列,默认是升序。通过自定义比较器,同理可比较,进行升序降序排列。
用vector容器同理
vector容器的用法可以参考蓝字文章。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool compare1(int a, int b);
bool compare2(int a, int b);
void Print(vector<int> arr);
int main()
{
vector<int> arr = { 1,3,5,7,9,8,6,4,2 };
cout << "升序排列:" << endl;
// 用迭代器进行访问
sort(arr.begin(),arr.end());
Print(arr);
cout << "降序排列:" << endl;
sort(arr.begin(), arr.end(), greater<int>());
Print(arr);
cout << "========================================" << endl;
cout << "用自定义比较器来做比较" << endl;
sort(arr.begin(), arr.end(), compare1);
cout << "升序排列:" << endl;
Print(arr);
sort(arr.begin(), arr.end(), compare2);
cout << "降序排列:" << endl;
Print(arr);
return 0;
}
bool compare1(int a, int b)
{
return a < b;
}
bool compare2(int a, int b)
{
return a > b;
}
void Print(vector<int> arr)
{
for (vector<int>::iterator it = arr.begin(); it != arr.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
输出样例:
5.2 max() 最大值,min() 最小值
5.3 swap() 交换
六、数学函数头文件
#include<math.h>
#include<cmath>
6.1 pow(底数,幂数)
6.2 sqrt(x) // 计算x的平方根,例如sqrt(16)的平方根是4.0
6.3 abs() 绝对值
6.4 sin(x),cos(x),tan(x) 分别计算x的正弦、余弦、正切值。这些函数接受以弧度为单位的角度作为输入。
6.5 log(x)和log10(x) 分别计算x的自然对数和以10为底的对数。
6.6 exp(x) 计算e的x次幂,其中e是自然对数的底。