
C++标准库为开发者提供了丰富的工具和功能。标准库中包含了大量的函数和类,可用于执行各种任务,如输入输出操作、字符串处理、数学计算、日期时间处理以及多线程编程等。这些标准库函数不仅提高了开发效率,还增强了代码的可移植性和可维护性。本文将对 C++ 中常用的标准库函数进行详细的汇总和介绍。
C++ 的输入输出流是标准库的重要组成部分,它提供了灵活的机制来执行数据的输入和输出操作。其中,std::cin、std::cout、std::cerr 和 std::clog 是最常用的标准输入输出流对象。
①std::cin
std::cin 用于从标准输入(通常是键盘)读取数据。它是 std::istream 类的一个对象,使用提取运算符 >> 来读取数据。下面是一个简单的示例:
#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 类的一个对象,使用插入运算符 << 来输出数据。以下是一个示例:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
程序在屏幕上输出 “Hello, World!” 并换行。
③std::cerr 和 std::clog
std::cerr 和 std::clog 都用于输出错误信息和日志信息。它们的区别在于,std::cerr 通常不经过缓冲区,直接输出,而 std::clog 会经过缓冲区。下面是一个简单的示例:
#include <iostream>
int main() {
std::cerr << "这是一个错误信息!" << std::endl;
std::clog << "这是一个日志信息!" << std::endl;
return 0;
}
除了标准输入输出流,C++ 还提供了文件输入输出流,用于对文件进行读写操作。主要的文件输入输出流类有 std::ifstream 和 std::ofstream。
① std::ifstream
std::ifstream 用于从文件中读取数据,它是 std::istream 的派生类。以下是一个读取文件内容的示例:
#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 的派生类。以下是一个向文件中写入数据的示例:
#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博客
std::string 类C++ 标准库中的字符串处理功能主要集中在 <string> 头文件中,该头文件提供了 std::string 类,用于表示和操作字符串。std::string 类提供了丰富的成员函数,方便进行字符串的各种操作。
①字符串的创建和初始化
#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 类提供了许多成员函数来进行字符串的操作,如拼接、查找、替换等。以下是一些常见操作的示例:
#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;
}
除了 std::string 类,还有一些其他标准库函数可以辅助进行字符串处理。
①std::getline
std::getline 函数用于从输入流读取一行到字符串中。以下是一个示例:
#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 函数用于将数值转换为字符串。以下是一个示例:
#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 函数用于将字符串转换为整数。以下是一个示例:
#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 函数用于从字符串中提取子串。以下是一个示例:
#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> 头文件提供了丰富的数学函数,用于进行各种数学计算。
① std::sqrt
std::sqrt 函数用于计算平方根。以下是一个示例:
#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 函数用于计算幂。以下是一个示例:
#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;
}
<cmath> 头文件提供了三角函数,如 std::sin、std::cos 和 std::tan。以下是一个示例:
#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;
}
①std::abs
std::abs 函数用于计算绝对值,有针对整数和浮点数的版本。以下是一个示例:
#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 函数用于四舍五入到最接近的整数。以下是一个示例:
#include <iostream>
#include <cmath>
int main() {
double num = 3.7;
double result = std::round(num);
std::cout << "四舍五入后的结果: " << result << std::endl;
return 0;
}
C++ 标准库提供了多种容器类,用于存储和管理数据。常见的容器有 std::vector、std::list、std::map、std::unordered_map、std::set 和 std::unordered_set。
std::vectorstd::vector 是一个动态数组,它可以自动调整大小以容纳更多的元素。以下是一个简单的示例:
#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;
}
std::liststd::list 是一个双向链表,它支持高效的插入和删除操作。以下是一个简单的示例:
#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;
}
std::map 和 std::unordered_mapstd::map 和 std::unordered_map 都是键值对集合。std::map 按键排序,而 std::unordered_map 不保证顺序。以下是一个 std::map 的示例:
#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;
}
std::set 和 std::unordered_setstd::set 和 std::unordered_set 都是元素集合,不允许重复元素。std::set 按键排序,而 std::unordered_set 不保证顺序。以下是一个 std::set 的示例:
#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> 头文件提供了大量的算法函数,可用于对容器中的元素进行各种操作。
std::sortstd::sort 函数用于对容器中的元素进行排序。以下是一个示例:
#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;
}
std::findstd::find 函数用于查找元素。以下是一个示例:
#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;
}
std::for_eachstd::for_each 函数用于对容器中的每个元素执行操作。以下是一个示例:
#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;
}
std::transformstd::transform 函数用于对容器中的每个元素应用函数,并将结果存储在另一个容器中。以下是一个示例:
#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> 头文件提供了处理日期和时间的类和函数。
std::chrono::system_clock::now()std::chrono::system_clock::now() 函数用于获取当前时间点。以下是一个示例:
#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(¤tTime);
return 0;
}
std::timestd::time 函数用于获取当前时间(自 1970 年 1 月 1 日以来的秒数)。以下是一个示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t currentTime = std::time(nullptr);
std::cout << "当前时间(秒数): " << currentTime << std::endl;
return 0;
}
std::localtime 和 std::gmtimestd::localtime 和 std::gmtime 函数用于将 time_t 转换为 tm 结构(包含年、月、日等)。以下是一个示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t currentTime = std::time(nullptr);
std::tm* localTime = std::localtime(¤tTime);
std::tm* gmtTime = std::gmtime(¤tTime);
std::cout << "本地时间: " << std::asctime(localTime);
std::cout << "格林威治时间: " << std::asctime(gmtTime);
return 0;
}
<thread>、<mutex>、<condition_variable> 等头文件提供了多线程编程的支持。
std::threadstd::thread 类表示一个线程。以下是一个简单的示例:
#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;
}std::mutex、std::lock_guard 和 std::unique_lockstd::mutex、std::lock_guard 和 std::unique_lock 用于同步,防止数据竞争。以下是一个使用 std::mutex 和 std::lock_guard 的示例:
#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;
}std::condition_variablestd::condition_variable 用于线程间的条件等待和通知。以下是一个简单的示例:
#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++ 标准库有更深入的了解,并在实际编程中灵活运用这些标准库函数和类。