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是自然对数的底。

上一篇:C++ | Leetcode C++题解之第446题等差数列划分II-子序列-题解:


下一篇:域名