首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C++标准库函数总结】常用标准库函数汇总

【C++标准库函数总结】常用标准库函数汇总

作者头像
byte轻骑兵
发布2026-01-20 18:11:17
发布2026-01-20 18:11:17
760
举报

C++标准库为开发者提供了丰富的工具和功能。标准库中包含了大量的函数和类,可用于执行各种任务,如输入输出操作、字符串处理、数学计算、日期时间处理以及多线程编程等。这些标准库函数不仅提高了开发效率,还增强了代码的可移植性和可维护性。本文将对 C++ 中常用的标准库函数进行详细的汇总和介绍。

一、输入输出(I/O)

1.1 标准输入输出流

C++ 的输入输出流是标准库的重要组成部分,它提供了灵活的机制来执行数据的输入和输出操作。其中,std::cinstd::coutstd::cerrstd::clog 是最常用的标准输入输出流对象。

std::cin

std::cin 用于从标准输入(通常是键盘)读取数据。它是 std::istream 类的一个对象,使用提取运算符 >> 来读取数据。下面是一个简单的示例:

代码语言:javascript
复制
#include <iostream>

int main() {
    int num;
    std::cout << "请输入一个整数: ";
    std::cin >> num;
    std::cout << "你输入的整数是: " << num << std::endl;
    return 0;
}

程序会提示用户输入一个整数,然后使用 std::cin 读取用户输入的整数,并将其存储在变量 num 中,最后将该整数输出到屏幕上。

std::cout

std::cout 用于向标准输出(通常是屏幕)输出数据。它是 std::ostream 类的一个对象,使用插入运算符 << 来输出数据。以下是一个示例:

代码语言:javascript
复制
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

程序在屏幕上输出 “Hello, World!” 并换行。

std::cerrstd::clog

std::cerrstd::clog 都用于输出错误信息和日志信息。它们的区别在于,std::cerr 通常不经过缓冲区,直接输出,而 std::clog 会经过缓冲区。下面是一个简单的示例:

代码语言:javascript
复制
#include <iostream>

int main() {
    std::cerr << "这是一个错误信息!" << std::endl;
    std::clog << "这是一个日志信息!" << std::endl;
    return 0;
}

1.2 文件输入输出流

除了标准输入输出流,C++ 还提供了文件输入输出流,用于对文件进行读写操作。主要的文件输入输出流类有 std::ifstreamstd::ofstream

std::ifstream

std::ifstream 用于从文件中读取数据,它是 std::istream 的派生类。以下是一个读取文件内容的示例:

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream inFile("example.txt");
    if (inFile.is_open()) {
        std::string line;
        while (std::getline(inFile, line)) {
            std::cout << line << std::endl;
        }
        inFile.close();
    } else {
        std::cerr << "无法打开文件!" << std::endl;
    }
    return 0;
}

程序尝试打开名为 “example.txt” 的文件,如果文件打开成功,则逐行读取文件内容并输出到屏幕上,最后关闭文件。如果文件打开失败,则输出错误信息。

std::ofstream

std::ofstream 用于向文件中写入数据,它是 std::ostream 的派生类。以下是一个向文件中写入数据的示例:

代码语言:javascript
复制
#include <iostream>
#include <fstream>

int main() {
    std::ofstream outFile("output.txt");
    if (outFile.is_open()) {
        outFile << "这是写入文件的内容!" << std::endl;
        outFile.close();
    } else {
        std::cerr << "无法打开文件!" << std::endl;
    }
    return 0;
}

程序尝试打开名为 “output.txt” 的文件,如果文件打开成功,则将指定的内容写入文件,最后关闭文件。如果文件打开失败,则输出错误信息。

详细梳理部分见【C++】输入输出(I/O)标准库函数汇总大全-CSDN博客

二、字符串处理

2.1 std::string

C++ 标准库中的字符串处理功能主要集中在 <string> 头文件中,该头文件提供了 std::string 类,用于表示和操作字符串。std::string 类提供了丰富的成员函数,方便进行字符串的各种操作。

①字符串的创建和初始化

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    std::string str1;  // 默认初始化,空字符串
    std::string str2 = "Hello";  // 用字符串字面量初始化
    std::string str3(str2);  // 拷贝初始化
    std::string str4(5, 'A');  // 用重复的字符初始化

    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "str3: " << str3 << std::endl;
    std::cout << "str4: " << str4 << std::endl;

    return 0;
}

② 字符串的操作

std::string 类提供了许多成员函数来进行字符串的操作,如拼接、查找、替换等。以下是一些常见操作的示例:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = " World";

    // 字符串拼接
    std::string str3 = str1 + str2;
    std::cout << "拼接后的字符串: " << str3 << std::endl;

    // 查找子串
    size_t pos = str3.find("World");
    if (pos != std::string::npos) {
        std::cout << "找到子串,位置为: " << pos << std::endl;
    } else {
        std::cout << "未找到子串!" << std::endl;
    }

    // 替换子串
    str3.replace(pos, 5, "C++");
    std::cout << "替换后的字符串: " << str3 << std::endl;

    return 0;
}

2.2 其他字符串处理函数

除了 std::string 类,还有一些其他标准库函数可以辅助进行字符串处理。

std::getline

std::getline 函数用于从输入流读取一行到字符串中。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    std::string line;
    std::cout << "请输入一行文本: ";
    std::getline(std::cin, line);
    std::cout << "你输入的文本是: " << line << std::endl;
    return 0;
}

std::to_string

std::to_string 函数用于将数值转换为字符串。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    int num = 123;
    std::string str = std::to_string(num);
    std::cout << "转换后的字符串: " << str << std::endl;
    return 0;
}

std::stoi

std::stoi 函数用于将字符串转换为整数。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    std::string str = "456";
    int num = std::stoi(str);
    std::cout << "转换后的整数: " << num << std::endl;
    return 0;
}

std::substr

std::substr 函数用于从字符串中提取子串。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    std::string subStr = str.substr(7, 5);
    std::cout << "提取的子串: " << subStr << std::endl;
    return 0;
}

三、数学

<cmath> 头文件提供了丰富的数学函数,用于进行各种数学计算。

3.1 平方根和幂运算

std::sqrt

std::sqrt 函数用于计算平方根。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <cmath>

int main() {
    double num = 16.0;
    double result = std::sqrt(num);
    std::cout << "平方根: " << result << std::endl;
    return 0;
}

std::pow

std::pow 函数用于计算幂。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <cmath>

int main() {
    double base = 2.0;
    double exponent = 3.0;
    double result = std::pow(base, exponent);
    std::cout << base << " 的 " << exponent << " 次幂: " << result << std::endl;
    return 0;
}

3.2 三角函数

<cmath> 头文件提供了三角函数,如 std::sinstd::cosstd::tan。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <cmath>

int main() {
    double angle = 45.0;
    double radian = angle * M_PI / 180.0;  // 将角度转换为弧度
    double sinValue = std::sin(radian);
    double cosValue = std::cos(radian);
    double tanValue = std::tan(radian);

    std::cout << "正弦值: " << sinValue << std::endl;
    std::cout << "余弦值: " << cosValue << std::endl;
    std::cout << "正切值: " << tanValue << std::endl;

    return 0;
}

3.3 绝对值和四舍五入

std::abs

std::abs 函数用于计算绝对值,有针对整数和浮点数的版本。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <cmath>

int main() {
    int num1 = -10;
    double num2 = -3.14;
    int absInt = std::abs(num1);
    double absDouble = std::abs(num2);

    std::cout << "整数的绝对值: " << absInt << std::endl;
    std::cout << "浮点数的绝对值: " << absDouble << std::endl;

    return 0;
}

std::round

std::round 函数用于四舍五入到最接近的整数。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <cmath>

int main() {
    double num = 3.7;
    double result = std::round(num);
    std::cout << "四舍五入后的结果: " << result << std::endl;
    return 0;
}

四、容器

C++ 标准库提供了多种容器类,用于存储和管理数据。常见的容器有 std::vectorstd::liststd::mapstd::unordered_mapstd::setstd::unordered_set

4.1 std::vector

std::vector 是一个动态数组,它可以自动调整大小以容纳更多的元素。以下是一个简单的示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

4.2 std::list

std::list 是一个双向链表,它支持高效的插入和删除操作。以下是一个简单的示例:

代码语言:javascript
复制
#include <iostream>
#include <list>

int main() {
    std::list<int> lst;
    lst.push_back(1);
    lst.push_back(2);
    lst.push_back(3);

    for (auto it = lst.begin(); it != lst.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

4.3 std::mapstd::unordered_map

std::mapstd::unordered_map 都是键值对集合。std::map 按键排序,而 std::unordered_map 不保证顺序。以下是一个 std::map 的示例:

代码语言:javascript
复制
#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> scores;
    scores["Alice"] = 90;
    scores["Bob"] = 85;
    scores["Charlie"] = 95;

    for (auto it = scores.begin(); it != scores.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    return 0;
}

4.4 std::setstd::unordered_set

std::setstd::unordered_set 都是元素集合,不允许重复元素。std::set 按键排序,而 std::unordered_set 不保证顺序。以下是一个 std::set 的示例:

代码语言:javascript
复制
#include <iostream>
#include <set>

int main() {
    std::set<int> s;
    s.insert(3);
    s.insert(1);
    s.insert(2);

    for (auto it = s.begin(); it != s.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

五、算法

<algorithm> 头文件提供了大量的算法函数,可用于对容器中的元素进行各种操作。

5.1 std::sort

std::sort 函数用于对容器中的元素进行排序。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    std::sort(vec.begin(), vec.end());

    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

5.2 std::find

std::find 函数用于查找元素。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = std::find(vec.begin(), vec.end(), 3);
    if (it != vec.end()) {
        std::cout << "找到元素: " << *it << std::endl;
    } else {
        std::cout << "未找到元素!" << std::endl;
    }

    return 0;
}

5.3 std::for_each

std::for_each 函数用于对容器中的每个元素执行操作。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>

void print(int num) {
    std::cout << num << " ";
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::for_each(vec.begin(), vec.end(), print);
    std::cout << std::endl;

    return 0;
}

5.4 std::transform

std::transform 函数用于对容器中的每个元素应用函数,并将结果存储在另一个容器中。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>

int square(int num) {
    return num * num;
}

int main() {
    std::vector<int> vec1 = {1, 2, 3, 4, 5};
    std::vector<int> vec2(vec1.size());

    std::transform(vec1.begin(), vec1.end(), vec2.begin(), square);

    for (int num : vec2) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

六、日期和时间

<chrono><ctime> 头文件提供了处理日期和时间的类和函数。

6.1 std::chrono::system_clock::now()

std::chrono::system_clock::now() 函数用于获取当前时间点。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <chrono>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t currentTime = std::chrono::system_clock::to_time_t(now);
    std::cout << "当前时间: " << std::ctime(&currentTime);
    return 0;
}

6.2 std::time

std::time 函数用于获取当前时间(自 1970 年 1 月 1 日以来的秒数)。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <ctime>

int main() {
    std::time_t currentTime = std::time(nullptr);
    std::cout << "当前时间(秒数): " << currentTime << std::endl;
    return 0;
}

6.3 std::localtimestd::gmtime

std::localtimestd::gmtime 函数用于将 time_t 转换为 tm 结构(包含年、月、日等)。以下是一个示例:

代码语言:javascript
复制
#include <iostream>
#include <ctime>

int main() {
    std::time_t currentTime = std::time(nullptr);
    std::tm* localTime = std::localtime(&currentTime);
    std::tm* gmtTime = std::gmtime(&currentTime);

    std::cout << "本地时间: " << std::asctime(localTime);
    std::cout << "格林威治时间: " << std::asctime(gmtTime);

    return 0;
}

七、多线程

<thread><mutex><condition_variable> 等头文件提供了多线程编程的支持。

7.1 std::thread

std::thread 类表示一个线程。以下是一个简单的示例:

代码语言:javascript
复制
#include <iostream>
#include <thread>

void printHello() {
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    std::thread t(printHello);
    t.join();
    std::cout << "Hello from main!" << std::endl;
    return 0;
}

7.2 std::mutexstd::lock_guardstd::unique_lock

std::mutexstd::lock_guardstd::unique_lock 用于同步,防止数据竞争。以下是一个使用 std::mutexstd::lock_guard 的示例:

代码语言:javascript
复制
#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;
int sharedData = 0;

void increment() {
    for (int i = 0; i < 100000; ++i) {
        std::lock_guard<std::mutex> lock(mtx);
        ++sharedData;
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);

    t1.join();
    t2.join();

    std::cout << "Shared data: " << sharedData << std::endl;
    return 0;
}

7.3 std::condition_variable

std::condition_variable 用于线程间的条件等待和通知。以下是一个简单的示例:

代码语言:javascript
复制
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void worker() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; });
    std::cout << "Worker thread is working!" << std::endl;
}

int main() {
    std::thread t(worker);

    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_one();

    t.join();
    std::cout << "Main thread is done!" << std::endl;
    return 0;
}

八、总结

本文对 C++ 标准库中常用的函数和类进行了详细的汇总和介绍,涵盖了输入输出、字符串处理、数学计算、容器、算法、日期和时间处理以及多线程编程等方面。这些标准库函数和类为 C++ 开发者提供了强大的工具,能够大大提高开发效率和代码质量。然而,C++ 标准库非常庞大且功能丰富,本文只是介绍了其中的一部分。在实际开发中,可以根据具体需求深入学习和运用标准库的其他功能。

希望通过本文的介绍,能够对 C++ 标准库有更深入的了解,并在实际编程中灵活运用这些标准库函数和类。


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、输入输出(I/O)
    • 1.1 标准输入输出流
    • 1.2 文件输入输出流
  • 二、字符串处理
    • 2.1 std::string 类
    • 2.2 其他字符串处理函数
  • 三、数学
    • 3.1 平方根和幂运算
    • 3.2 三角函数
    • 3.3 绝对值和四舍五入
  • 四、容器
    • 4.1 std::vector
    • 4.2 std::list
    • 4.3 std::map 和 std::unordered_map
    • 4.4 std::set 和 std::unordered_set
  • 五、算法
    • 5.1 std::sort
    • 5.2 std::find
    • 5.3 std::for_each
    • 5.4 std::transform
  • 六、日期和时间
    • 6.1 std::chrono::system_clock::now()
    • 6.2 std::time
    • 6.3 std::localtime 和 std::gmtime
  • 七、多线程
    • 7.1 std::thread
    • 7.2 std::mutex、std::lock_guard 和 std::unique_lock
    • 7.3 std::condition_variable
  • 八、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档