Login
首页 > 图文教程 > C++教程

C++万能头文件指南【包含的函数与组件分类】

燃冰世纪教育 2025-08-05 09:19:30 人看过

关于<bits/stdc++.h>

bits/stdc++.h 是一个非标准但广泛使用的C++头文件,它包含了C++标准库中的所有头文件。这意味着包含这个头文件后,你可以直接使用C++标准库提供的几乎所有功能,无需单独包含其他头文件。

注意:这个头文件并非C++标准的一部分,主要在GCC编译器中可用。在生产环境或需要严格遵循标准的项目中,不建议使用。但在算法竞赛、学习和快速原型开发中非常方便。


包含的函数与组件分类

1. 输入输出函数

cin 和 cout - 基本输入输出

用于从标准输入设备(通常是键盘)读取数据和向标准输出设备(通常是屏幕)输出数据。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int num;          // 声明一个整数变量
    string name;      // 声明一个字符串变量
    
    // 输出提示信息
    cout << "请输入一个整数: ";
    // 读取整数
    cin >> num;
    
    // 输出提示信息
    cout << "请输入你的名字: ";
    // 读取字符串(遇到空格会停止)
    cin >> name;
    
    // 输出结果
    cout << endl;  // 换行
    cout << "你输入的整数是: " << num << endl;
    cout << "你输入的名字是: " << name << endl;
    
    return 0;
}

代码说明:

  • cout 用于输出数据,配合 << 运算符使用
  • cin 用于输入数据,配合 >> 运算符使用
  • endl 用于换行并刷新输出缓冲区
  • 输入字符串时,cin 会在遇到空格、制表符或换行符时停止读取

getline() - 读取一行字符串

用于读取一整行字符串,包括空格在内的所有字符,直到遇到换行符为止。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string line;
    
    cout << "请输入一句话(可以包含空格): ";
    // 读取一整行输入,包括空格
    getline(cin, line);
    
    cout << "你输入的是: " << line << endl;
    cout << "这句话的长度是: " << line.length() << "个字符" << endl;
    
    return 0;
}

代码说明:

  • getline(cin, str) 函数需要两个参数:输入流和存储结果的字符串变量
  • 该函数会读取所有字符,包括空格,直到遇到换行符
  • 换行符会被读取但不会被包含在结果字符串中
  • 如果在使用 cin >> variable 之后立即使用 getline(),需要先处理残留的换行符

格式控制符 - 控制输入输出格式

用于控制输出的格式,如设置整数的进制、浮点数的精度等。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int num = 255;
    double pi = 3.1415926535;
    
    // 十进制输出(默认)
    cout << "十进制: " << num << endl;
    
    // 十六进制输出
    cout << "十六进制: " << hex << num << endl;
    
    // 八进制输出
    cout << "八进制: " << oct << num << endl;
    
    // 恢复十进制输出
    cout << "恢复十进制: " << dec << num << endl;
    
    // 浮点数默认输出
    cout << "\n默认浮点数: " << pi << endl;
    
    // 设置浮点数精度为2位小数
    cout << "保留2位小数: " << fixed << setprecision(2) << pi << endl;
    
    // 设置浮点数精度为6位小数
    cout << "保留6位小数: " << setprecision(6) << pi << endl;
    
    return 0;
}

常用格式控制符说明:

  • hex - 以十六进制格式输出整数
  • oct - 以八进制格式输出整数
  • dec - 以十进制格式输出整数(默认)
  • fixed - 以固定小数位数格式输出浮点数
  • setprecision(n) - 设置浮点数的精度为n位
  • setw(n) - 设置字段宽度为n个字符

2. 字符串函数

string 类基本操作

string类提供了多种方法来操作字符串,如获取长度、拼接、比较等。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 初始化字符串的几种方式
    string s1 = "Hello";
    string s2("World");
    string s3;  // 空字符串
    
    // 字符串拼接
    s3 = s1 + " " + s2;  // 使用+运算符
    cout << "拼接结果: " << s3 << endl;
    
    // 获取字符串长度
    cout << "字符串长度: " << s3.length() << endl;
    
    // 字符串比较
    if (s1 == "Hello") {
        cout << "s1 等于 'Hello'" << endl;
    }
    
    // 字符串是否为空
    string emptyStr;
    if (emptyStr.empty()) {
        cout << "emptyStr 是一个空字符串" << endl;
    }
    
    // 字符串赋值
    string s4;
    s4 = s1;
    cout << "s4 的值: " << s4 << endl;
    
    return 0;
}

常用方法说明:

  • length() / size() - 返回字符串的长度
  • empty() - 判断字符串是否为空,为空返回true
  • operator+ - 拼接两个字符串
  • operator= - 字符串赋值
  • operator== / operator!= - 字符串比较

字符串索引和子串操作

访问字符串中的单个字符,以及提取子字符串。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s = "Hello, World!";
    
    // 使用[]访问单个字符(索引从0开始)
    cout << "第一个字符: " << s[0] << endl;
    cout << "第六个字符: " << s[5] << endl;
    
    // 使用at()方法访问单个字符(会做边界检查)
    try {
        cout << "第十个字符: " << s.at(9) << endl;
        // 尝试访问超出范围的字符
        cout << "第20个字符: " << s.at(19) << endl;
    } catch (out_of_range& e) {
        cout << "访问出错: " << e.what() << endl;
    }
    
    // 提取子字符串 substr(pos, len)
    // 从位置6开始,提取5个字符
    string sub1 = s.substr(7, 5);
    cout << "子字符串1: " << sub1 << endl;  // 输出 "World"
    
    // 只指定起始位置,提取到字符串末尾
    string sub2 = s.substr(0, 5);
    cout << "子字符串2: " << sub2 << endl;  // 输出 "Hello"
    
    return 0;
}

方法说明:

  • operator[] - 通过索引访问字符,不做边界检查
  • at(index) - 通过索引访问字符,会做边界检查,超出范围会抛出异常
  • substr(pos, len) - 从位置pos开始,提取长度为len的子字符串
  • 字符串索引从0开始,即第一个字符的索引为0

字符串查找和替换

在字符串中查找子串,以及替换字符串中的部分内容。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s = "I like C++, C++ is fun!";
    
    // 查找子串
    size_t pos = s.find("C++");
    if (pos != string::npos) {
        cout << "找到 'C++',位置在: " << pos << endl;
    }
    
    // 从指定位置开始查找
    pos = s.find("C++", 10);  // 从索引10开始查找
    if (pos != string::npos) {
        cout << "再次找到 'C++',位置在: " << pos << endl;
    }
    
    // 替换子串
    string s2 = s;
    // 从位置7开始,替换3个字符为"Python"
    s2.replace(7, 3, "Python");
    cout << "替换后: " << s2 << endl;
    
    // 查找并替换所有匹配项
    string s3 = s;
    pos = 0;
    while ((pos = s3.find("C++", pos)) != string::npos) {
        s3.replace(pos, 3, "Java");
        pos += 4;  // 移动到替换后的下一个位置,避免重复替换
    }
    cout << "全部替换后: " << s3 << endl;
    
    return 0;
}

方法说明:

  • find(substr, pos) - 从位置pos开始查找substr,返回首次出现的位置
  • string::npos - 一个特殊值,表示未找到匹配项
  • replace(pos, len, newstr) - 从位置pos开始,替换长度为len的字符为newstr
  • 注意在循环替换时,需要更新pos以避免无限循环

3. 容器函数

vector - 动态数组

vector是最常用的容器,提供动态大小的数组功能,支持快速随机访问。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 初始化vector的几种方式
    vectorv1;  // 空vector
    vectorv2(5);  // 包含5个元素,初始值为0
    vectorv3(3, 10);  // 包含3个元素,每个元素值为10
    
    // 对于GCC 4.9.2,使用C++11列表初始化需要开启-std=c++11
    vectorv4;
    // 向vector添加元素
    v4.push_back(1);
    v4.push_back(2);
    v4.push_back(3);
    
    // 访问vector元素
    cout << "v3的元素: ";
    for (int i = 0; i < v3.size(); i++) {
        cout << v3[i] << " ";
    }
    cout << endl;
    
    // 使用迭代器遍历vector
    cout << "v4的元素: ";
    for (vector::iterator it = v4.begin(); it != v4.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    
    // 获取vector大小
    cout << "v4的大小: " << v4.size() << endl;
    
    // 移除最后一个元素
    v4.pop_back();
    cout << "v4移除最后一个元素后: ";
    for (int num : v4) {  // 范围for循环(C++11)
        cout << num << " ";
    }
    cout << endl;
    
    // 清空vector
    v4.clear();
    if (v4.empty()) {
        cout << "v4已清空" << endl;
    }
    
    return 0;
}

常用方法说明:

  • push_back(value) - 在vector末尾添加元素
  • pop_back() - 移除vector末尾的元素
  • size() - 返回vector中元素的数量
  • empty() - 判断vector是否为空
  • clear() - 清空vector中的所有元素
  • operator[] - 通过索引访问元素
  • begin() / end() - 返回迭代器,用于遍历元素

map - 键值对映射

map是一种关联容器,存储键值对(key-value),按键自动排序,每个键唯一。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 创建一个map,键为string类型,值为int类型
    mapstudentScores;
    
    // 插入键值对
    studentScores["张三"] = 90;
    studentScores["李四"] = 85;
    studentScores["王五"] = 95;
    
    // 使用insert方法插入
    studentScores.insert(pair("赵六", 88));
    
    // 访问元素
    cout << "张三的分数: " << studentScores["张三"] << endl;
    
    // 查找元素
    string name = "李四";
    map::iterator it = studentScores.find(name);
    if (it != studentScores.end()) {
        cout << name << "的分数: " << it->second << endl;
    } else {
        cout << "没有找到" << name << endl;
    }
    
    // 遍历map
    cout << "\n所有学生的分数:" << endl;
    for (it = studentScores.begin(); it != studentScores.end(); ++it) {
        // it->first 是键,it->second 是值
        cout << it->first << ": " << it->second << endl;
    }
    
    // 获取map大小
    cout << "\n学生人数: " << studentScores.size() << endl;
    
    // 删除元素
    studentScores.erase("王五");
    cout << "删除王五后,学生人数: " << studentScores.size() << endl;
    
    return 0;
}

常用方法说明:

  • operator[key] - 通过键访问或设置值
  • insert(pair) - 插入键值对
  • find(key) - 查找键,返回迭代器
  • erase(key) - 删除指定键的元素
  • size() - 返回键值对的数量
  • begin() / end() - 返回迭代器,用于遍历
  • map会自动按键的升序排序

stack 和 queue - 栈和队列

stack是后进先出(LIFO)的容器,queue是先进先出(FIFO)的容器。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 演示stack(栈)的使用
    stacks;
    
    // 入栈
    s.push(10);
    s.push(20);
    s.push(30);
    
    cout << "栈的大小: " << s.size() << endl;
    cout << "栈顶元素: " << s.top() << endl;
    
    // 出栈
    cout << "出栈顺序: ";
    while (!s.empty()) {
        cout << s.top() << " ";  // 获取栈顶元素
        s.pop();                 // 移除栈顶元素
    }
    cout << endl << endl;
    
    // 演示queue(队列)的使用
    queueq;
    
    // 入队
    q.push("第一个");
    q.push("第二个");
    q.push("第三个");
    
    cout << "队列的大小: " << q.size() << endl;
    cout << "队首元素: " << q.front() << endl;
    
    // 出队
    cout << "出队顺序: ";
    while (!q.empty()) {
        cout << q.front() << " ";  // 获取队首元素
        q.pop();                   // 移除队首元素
    }
    cout << endl;
    
    return 0;
}

常用方法说明:

stack 方法:
  • push(value) - 向栈顶添加元素
  • pop() - 移除栈顶元素
  • top() - 返回栈顶元素
  • size() - 返回栈中元素数量
  • empty() - 判断栈是否为空
queue 方法:
  • push(value) - 向队尾添加元素
  • pop() - 移除队首元素
  • front() - 返回队首元素
  • back() - 返回队尾元素
  • size() - 返回队列中元素数量
  • empty() - 判断队列是否为空

4. 算法函数

sort() - 排序函数

对容器中的元素进行排序,默认按升序排列,也可以自定义排序规则。

示例代码:

#include <bits/stdc++.h>
using namespace std;

// 自定义比较函数,用于降序排序
bool compareDesc(int a, int b) {
    return a > b;  // a > b 时返回true,即a排在b前面
}

// 自定义结构体
struct Student {
    string name;
    int score;
};

// 结构体比较函数,按分数升序排列
bool compareStudentByScore(const Student& s1, const Student& s2) {
    return s1.score < s2.score;
}

int main() {
    // 1. 排序整数数组
    vectornumbers;
    numbers.push_back(5);
    numbers.push_back(2);
    numbers.push_back(8);
    numbers.push_back(1);
    numbers.push_back(9);
    
    // 默认升序排序
    sort(numbers.begin(), numbers.end());
    cout << "升序排序结果: ";
    for (int num : numbers) {
        cout << num << " ";
    }
    cout << endl;
    
    // 使用自定义函数进行降序排序
    sort(numbers.begin(), numbers.end(), compareDesc);
    cout << "降序排序结果: ";
    for (int num : numbers) {
        cout << num << " ";
    }
    cout << endl << endl;
    
    // 2. 排序结构体
    vectorstudents;
    students.push_back({"张三", 85});
    students.push_back({"李四", 92});
    students.push_back({"王五", 78});
    
    // 按分数排序
    sort(students.begin(), students.end(), compareStudentByScore);
    
    cout << "按分数排序的学生列表:" << endl;
    for (const Student& s : students) {
        cout << s.name << " - " << s.score << "分" << endl;
    }
    
    return 0;
}

函数说明:

  • sort(begin, end) - 对[begin, end)范围内的元素进行升序排序
  • sort(begin, end, comp) - 使用比较函数comp进行排序
  • 比较函数comp返回true时,表示第一个参数应该排在第二个参数前面
  • 可以排序数组、vector等多种容器
  • 排序算法是不稳定的,平均时间复杂度为O(n log n)

min(), max(), swap() - 最小值、最大值和交换函数

min()返回两个值中的较小者,max()返回两个值中的较大者,swap()交换两个值。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 基本数据类型的min和max
    int a = 10, b = 20;
    cout << "a = " << a << ", b = " << b << endl;
    cout << "min(a, b) = " << min(a, b) << endl;
    cout << "max(a, b) = " << max(a, b) << endl;
    
    // 字符串的min和max(按字典序比较)
    string s1 = "apple", s2 = "banana";
    cout << "\ns1 = " << s1 << ", s2 = " << s2 << endl;
    cout << "min(s1, s2) = " << min(s1, s2) << endl;
    cout << "max(s1, s2) = " << max(s1, s2) << endl;
    
    // swap交换两个变量的值
    cout << "\n交换前: a = " << a << ", b = " << b << endl;
    swap(a, b);
    cout << "交换后: a = " << a << ", b = " << b << endl;
    
    // 交换数组元素
    vectorv;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    
    cout << "\n交换前的vector: ";
    for (int num : v) {
        cout << num << " ";
    }
    
    // 交换第2个和第4个元素(索引1和3)
    swap(v[1], v[3]);
    
    cout << "\n交换后的vector: ";
    for (int num : v) {
        cout << num << " ";
    }
    cout << endl;
    
    return 0;
}

函数说明:

  • min(a, b) - 返回a和b中的较小值
  • max(a, b) - 返回a和b中的较大值
  • swap(a, b) - 交换a和b的值
  • 这些函数支持多种数据类型:整数、浮点数、字符串等
  • 对于自定义类型,需要定义相应的比较运算符才能使用min和max

find() 和 reverse() - 查找和反转函数

find()用于在容器中查找指定元素,reverse()用于反转容器中元素的顺序。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 创建并初始化vector
    vectornumbers;
    numbers.push_back(3);
    numbers.push_back(1);
    numbers.push_back(4);
    numbers.push_back(1);
    numbers.push_back(5);
    numbers.push_back(9);
    
    cout << "原始vector: ";
    for (int num : numbers) {
        cout << num << " ";
    }
    cout << endl;
    
    // 使用find查找元素
    int target = 4;
    vector::iterator it = find(numbers.begin(), numbers.end(), target);
    
    if (it != numbers.end()) {
        // 计算找到的位置(索引)
        int index = it - numbers.begin();
        cout << "找到元素 " << target << ",位置在索引 " << index << endl;
    } else {
        cout << "未找到元素 " << target << endl;
    }
    
    // 查找不存在的元素
    target = 7;
    it = find(numbers.begin(), numbers.end(), target);
    if (it == numbers.end()) {
        cout << "未找到元素 " << target << endl;
    }
    
    // 使用reverse反转元素顺序
    reverse(numbers.begin(), numbers.end());
    
    cout << "反转后的vector: ";
    for (int num : numbers) {
        cout << num << " ";
    }
    cout << endl;
    
    // 反转字符串
    string s = "Hello World";
    cout << "\n原始字符串: " << s << endl;
    
    reverse(s.begin(), s.end());
    cout << "反转后的字符串: " << s << endl;
    
    return 0;
}

函数说明:

  • find(begin, end, value) - 在[begin, end)范围内查找value
  • find()返回指向找到元素的迭代器,如果未找到则返回end()
  • reverse(begin, end) - 反转[begin, end)范围内的元素顺序
  • 这些函数适用于多种容器,如vector、数组、string等
  • 可以通过迭代器减去begin()来计算元素的索引位置

5. 数学函数

基本数学函数

包括绝对值、平方根、幂运算等常用数学函数。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 绝对值函数
    int num1 = -10;
    double num2 = -3.14;
    cout << "abs(" << num1 << ") = " << abs(num1) << endl;
    cout << "abs(" << num2 << ") = " << abs(num2) << endl;
    
    // 平方根函数
    double x = 25.0;
    cout << "\nsqrt(" << x << ") = " << sqrt(x) << endl;
    
    // 幂运算函数
    double base = 2.0;
    double exponent = 3.0;
    cout << base << "^" << exponent << " = " << pow(base, exponent) << endl;
    
    // 指数函数(e的幂)
    double exp_arg = 1.0;
    cout << "exp(" << exp_arg << ") = " << exp(exp_arg) << endl;
    
    // 对数函数
    double log_arg = exp(1.0);  // e的值
    cout << "log(" << log_arg << ") = " << log(log_arg) << endl;  // 自然对数
    cout << "log10(100) = " << log10(100) << endl;  // 以10为底的对数
    
    return 0;
}

函数说明:

  • abs(x) - 返回x的绝对值,适用于整数和浮点数
  • sqrt(x) - 返回x的平方根,x必须是非负数
  • pow(base, exp) - 返回base的exp次幂
  • exp(x) - 返回e的x次幂,其中e是自然对数的底数
  • log(x) - 返回x的自然对数(以e为底)
  • log10(x) - 返回x的以10为底的对数

三角函数和取整函数

包括正弦、余弦等三角函数,以及向上取整、向下取整等取整函数。

示例代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 三角函数(参数为弧度)
    double pi = acos(-1.0);  // 获取π的值
    cout << "π ≈ " << pi << endl;
    
    double angle = pi / 2;  // 90度,以弧度表示
    cout << "sin(π/2) = " << sin(angle) << endl;
    cout << "cos(π/2) = " << cos(angle) << endl;
    cout << "tan(π/4) = " << tan(pi / 4) << endl;
    
    // 反三角函数
    double sin_val = 1.0;
    cout << "asin(" << sin_val << ") = " << asin(sin_val) << " 弧度" << endl;
    
    // 取整函数
    double num = 3.7;
    cout << "\n" << num << " 的向上取整: " << ceil(num) << endl;
    cout << num << " 的向下取整: " << floor(num) << endl;
    
    num = 3.2;
    cout << num << " 的向上取整: " << ceil(num) << endl;
    cout << num << " 的向下取整: " << floor(num) << endl;
    
    // 四舍五入
    cout << "\n3.4 四舍五入: " << round(3.4) << endl;
    cout << "3.5 四舍五入: " << round(3.5) << endl;
    
    return 0;
}

函数说明:

三角函数:
  • sin(x) - 返回x的正弦值,x为弧度
  • cos(x) - 返回x的余弦值,x为弧度
  • tan(x) - 返回x的正切值,x为弧度
  • asin(x) - 返回x的反正弦值,结果为弧度
  • acos(x) - 返回x的反余弦值,结果为弧度
取整函数:
  • ceil(x) - 向上取整,返回不小于x的最小整数
  • floor(x) - 向下取整,返回不大于x的最大整数
  • round(x) - 四舍五入到最接近的整数



版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章