第十四课 头文件与标准库速查
常用头文件与标准库函数速查表,便于查阅。
- iostream(输入输出)
#include <iostream>
using namespace std;
int main() {
// 基本输出
cout << "Hello" << endl; // 输出字符串+换行
cout << 123 << endl; // 输出数字
cout << 3.14 << endl; // 输出浮点数
// 基本输入
int num;
cin >> num; // 从键盘读取整数
string name;
cin >> name; // 读取字符串(不含空格)
// 连续输入输出
int a, b;
cin >> a >> b;
cout << a << " " << b << endl;
// 格式化输出
cout << hex << 255 << endl; // ff(十六进制)
cout << oct << 255 << endl; // 377(八进制)
cout << dec << 255 << endl; // 255(十进制)
cout << endl; // 换行
cout << "\t"; // 制表符
return 0;
}
- string(字符串)
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "Hello";
// 长度相关
s.length(); // 字符串长度
s.size(); // 同length
s.empty(); // 是否为空
// 访问
s[0]; // 下标访问
s.at(0); // 带边界检查的访问
// 修改
s += " World"; // 拼接
s.append("!"); // 追加
s.push_back('!'); // 追加字符
s.pop_back(); // 删除最后一个字符
s.clear(); // 清空
// 子串
s.substr(0, 5); // 从位置0开始,长度5
s.substr(6); // 从位置6到末尾
// 查找
s.find("lo"); // 查找子串位置
s.rfind("lo"); // 从后往前找
s.find_first_of("aeiou"); // 第一个元音字母位置
// 替换
s.replace(0, 5, "Hi"); // 从位置0替换5个字符为"Hi"
// 比较
s == "Hello"; // 比较
s.compare("Hello"); // 返回0相等,负数小于,正数大于
// 插入删除
s.insert(5, " World"); // 插入
s.erase(5, 6); // 从位置5删除6个字符
// 大小写转换
#include <cctype>
char c = 'A';
c = tolower(c); // 转小写
c = toupper(c); // 转大写
return 0;
}
- vector(动态数组)
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
// 添加
v.push_back(1); // 末尾添加
v.emplace_back(2); // C++11原地构造
// 插入
v.insert(v.begin() + 1, 100); // 在位置1插入100
// 删除
v.pop_back(); // 删除最后一个
v.erase(v.begin()); // 删除第一个
// 大小
v.size(); // 元素个数
v.capacity(); // 容器容量
v.empty(); // 是否为空
// 访问
v[0]; // 下标访问
v.at(0); // 带边界检查
v.front(); // 第一个元素
v.back(); // 最后一个元素
// 其他
v.clear(); // 清空
v.resize(10); // 调整大小
v.reserve(100); // 预留容量
return 0;
}
- map(映射)
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> m;
// 插入
m["apple"] = 5;
m.insert(make_pair("banana", 3));
m.insert({"orange", 8});
m.emplace("grape", 6);
// 访问
m["key"]; // 如果key不存在会插入并返回默认值
m.at("key"); // 如果key不存在会抛异常
// 查找
m.find("apple"); // 返回迭代器
m.count("apple"); // 返回0或1
// 删除
m.erase("apple"); // 按key删除
m.erase(it); // 按迭代器删除
// 遍历
for (auto &p : m) {
p.first; // 键
p.second; // 值
}
// 其他
m.size(); // 元素个数
m.empty(); // 是否为空
m.clear(); // 清空
return 0;
}
- algorithm(算法)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> v = {5, 2, 8, 1, 9, 3};
// 排序
sort(v.begin(), v.end()); // 升序
sort(v.begin(), v.end(), greater<int>()); // 降序
// 逆序
reverse(v.begin(), v.end());
// 查找
find(v.begin(), v.end(), 5); // 查找元素
find_if(v.begin(), v.end(), [](int x){return x > 5;}); // 条件查找
// 最大最小
*max_element(v.begin(), v.end());
*min_element(v.begin(), v.end());
// 计数
int cnt = count(v.begin(), v.end(), 5);
// 交换
swap(v[0], v[1]);
// 填充
fill(v.begin(), v.end(), 0);
// 复制
vector<int> v2;
copy(v.begin(), v.end(), back_inserter(v2));
// 去重(需要先排序)
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
return 0;
}
- cmath(数学函数)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
// 绝对值
abs(-5); // 5(整数)
fabs(-3.14); // 3.14(浮点数)
// 幂和根
pow(2, 3); // 8.0(2的3次方)
sqrt(16); // 4.0(平方根)
cbrt(27); // 3.0(立方根)
// 三角函数
sin(0); // 正弦
cos(0); // 余弦
tan(0); // 正切
// 反三角函数
asin(0); // 反正弦
acos(0); // 反余弦
atan(0); // 反正切
// 对数和指数
log(e); // 1.0(自然对数)
log10(10); // 1.0(常用对数)
exp(1); // e
// 取整
floor(3.7); // 3.0(向下取整)
ceil(3.2); // 4.0(向上取整)
round(3.5); // 4.0(四舍五入)
trunc(3.7); // 3.0(截断取整)
// 取余
fmod(10, 3); // 1.0(浮点数取余)
return 0;
}
- ctime(时间)
#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 获取当前时间
time_t now = time(nullptr);
cout << now << endl; // 时间戳(秒)
// 转换为本地时间
tm *ltm = localtime(&now);
cout << "年:" << 1900 + ltm->tm_year << endl;
cout << "月:" << 1 + ltm->tm_mon << endl;
cout << "日:" << ltm->tm_mday << endl;
cout << "时:" << ltm->tm_hour << endl;
cout << "分:" << ltm->tm_min << endl;
cout << "秒:" << ltm->tm_sec << endl;
// 格式化时间
char buf[100];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", ltm);
cout << buf << endl; // 2024-01-01 12:00:00
// 计算时间差
time_t t1, t2;
t1 = time(nullptr);
// 执行一些操作...
t2 = time(nullptr);
cout << "相差:" << difftime(t2, t1) << "秒" << endl;
return 0;
}
- cstdlib(常用工具)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
// 随机数
srand(time(nullptr)); // 随机数种子
int r = rand(); // 0~RAND_MAX之间的随机数
r = rand() % 100; // 0~99
// 生成范围[a,b]的随机数
int r2 = rand() % (b - a + 1) + a;
// C++11随机数
#include <random>
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> dis(1, 100);
int r3 = dis(gen); // 1~100的随机整数
// 退出程序
// exit(0); // 正常退出
// exit(1); // 异常退出
// 字符串转换
atoi("123"); // 字符串转int
atof("3.14"); // 字符串转double
atol("123456"); // 字符串转long
// 排序(简单)
// qsort(array, n, sizeof(type), compare);
return 0;
}
