当前位置: 首页 > news >正文

竞赛算法中的常用库以及库函数

标准库以及库函数

  • 一、`<string>` 库常用函数
    • 1.常用库函数
    • 2.示例代码
  • 二、`<algorithm>` 库常用函数
    • 1.常用库函数
    • 2.示例代码
  • 三、`<cmath>` 库常用函数
    • 1.常用库函数
    • 2.示例代码

在蓝桥杯,acm,ccpc等包含C++算法竞赛中,有许多标准库,包含大量可直接调用的函数,能显著提升编程效率。

一、<string> 库常用函数

1.常用库函数

string类提供了便捷的字符串操作方法,比C风格字符串更安全高效:

  1. 基础属性

    • s.size() / s.length():返回字符串长度
    • s.empty():判断字符串是否为空(为空返回true
    • s.clear():清空字符串内容
  2. 元素访问

    • s[i]:访问第i个字符(无越界检查,高效)
    • s.at(i):访问第i个字符(有越界检查,抛出异常)
    • s.front() / s.back():直接获取首/尾字符
  3. 字符串操作

    • s += t / s.append(t):拼接字符串t到s末尾
    • s.insert(pos, t):在位置pos插入字符串t
    • s.erase(pos, len):从pos开始删除len个字符(默认删除到末尾)
    • s.substr(pos, len):提取从pos开始的len个字符(len默认到末尾)
    • s.find(t):查找t首次出现的位置,未找到返回string::npos
    • s.rfind(t):从尾部开始查找t首次出现的位置
    • s.replace(pos, len, t):将pos开始的len个字符替换为t
  4. 类型转换

    • stoi(s) / stol(s) / stoll(s):字符串转int/long/long long
    • stof(s) / stod(s):字符串转float/double
    • to_string(x):将任意数字类型x转为string

2.示例代码

#include <iostream>
#include <string>
using namespace std;int main() {// 字符串初始化string s1 = "Hello";string s2(3, '!'); // 创建包含3个'!'的字符串// 字符串拼接string s3 = s1 + " World" + s2;cout << "拼接结果: " << s3 << endl; // 输出: Hello World!!!// 查找子串size_t pos = s3.find("World");if (pos != string::npos) {cout << "\"World\"的位置: " << pos << endl; // 输出: 6}// 截取子串string sub = s3.substr(0, 5); // 从位置0开始取5个字符cout << "截取子串: " << sub << endl; // 输出: Hello// 替换操作s3.replace(5, 1, ","); // 将位置5的1个字符替换为','cout << "替换后: " << s3 << endl; // 输出: Hello,World!!!// 字符串转数字string numStr = "12345";int num = stoi(numStr);cout << "字符串转数字: " << num + 1 << endl; // 输出: 12346return 0;
}

二、<algorithm> 库常用函数

1.常用库函数

该库提供了通用算法,适用于vector、string等容器,是比赛中的"效率利器":

  1. 排序与查找

    • sort(begin, end):对[begin, end)区间升序排序(默认less<>
    • sort(begin, end, cmp):使用自定义比较函数cmp排序(如降序)
    • binary_search(begin, end, val):二分查找val是否存在(需先排序)
    • lower_bound(begin, end, val):返回首个≥val的元素迭代器
    • upper_bound(begin, end, val):返回首个>val的元素迭代器
  2. 元素操作

    • swap(a, b):交换a和b的值(支持任意可交换类型)
    • reverse(begin, end):反转区间内元素(如字符串反转)
    • unique(begin, end):去除连续重复元素(需先排序,返回去重后尾迭代器)
    • count(begin, end, val):统计val在区间中出现的次数
    • min_element(begin, end) / max_element(begin, end):返回区间最小/大值迭代器
  3. 排列与组合

    • next_permutation(begin, end):生成下一个字典序排列(用于全排列问题)
    • prev_permutation(begin, end):生成上一个字典序排列

2.示例代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;// 自定义比较函数(降序)
bool cmp(int a, int b) {return a > b;
}int main() {vector<int> nums = {3, 1, 4, 1, 5, 9, 2};// 排序(默认升序)sort(nums.begin(), nums.end());cout << "升序排序: ";for (int num : nums) cout << num << " "; // 输出: 1 1 2 3 4 5 9cout << endl;// 自定义排序(降序)sort(nums.begin(), nums.end(), cmp);cout << "降序排序: ";for (int num : nums) cout << num << " "; // 输出: 9 5 4 3 2 1 1cout << endl;// 查找元素int target = 3;bool exists = binary_search(nums.begin(), nums.end(), target, cmp);cout << "是否存在" << target << "?: " << (exists ? "是" : "否") << endl; // 输出: 是// 反转元素reverse(nums.begin(), nums.end());cout << "反转后: ";for (int num : nums) cout << num << " "; // 输出: 1 1 2 3 4 5 9cout << endl;// 统计元素出现次数int cnt = count(nums.begin(), nums.end(), 1);cout << "数字1出现的次数: " << cnt << endl; // 输出: 2return 0;
}

三、<cmath> 库常用函数

1.常用库函数

数学计算必备库,包含各类常用数学函数:

  1. 基础运算

    • abs(x):返回x的绝对值(x为int/long等整数类型)
    • fabs(x):返回x的绝对值(x为double/float等浮点类型)
    • pow(x, y):计算x的y次方(x^y)
    • sqrt(x):计算x的平方根(x≥0)
    • cbrt(x):计算x的立方根
  2. 取整函数

    • ceil(x):向上取整(如ceil(2.3)=3.0)
    • floor(x):向下取整(如floor(2.7)=2.0)
    • round(x):四舍五入取整(如round(2.5)=3.0)
  3. 三角函数(弧度制)

    • sin(x) / cos(x) / tan(x):正弦/余弦/正切
    • asin(x) / acos(x) / atan(x):反正弦/反余弦/反正切
  4. 其他常用

    • log(x):自然对数(以e为底)
    • log10(x):常用对数(以10为底)
    • exp(x):计算e的x次方(e^x)
    • hypot(x, y):计算√(x² + y²)(直角三角形斜边长度)

    2.示例代码

#include <iostream>
#include <cmath>
#include <iomanip> // 用于设置输出精度
using namespace std;int main() {double x = 2.5, y = -3.7;// 绝对值cout << "|" << y << "| = " << fabs(y) << endl; // 输出: 3.7// 幂运算与开方cout << x << "的平方: " << pow(x, 2) << endl; // 输出: 6.25cout << "16的平方根: " << sqrt(16) << endl;   // 输出: 4// 取整函数cout << "向上取整(" << x << "): " << ceil(x) << endl;   // 输出: 3cout << "向下取整(" << x << "): " << floor(x) << endl;  // 输出: 2cout << "四舍五入(" << x << "): " << round(x) << endl;  // 输出: 2// 三角函数(弧度制)double pi = acos(-1); // 获取π值cout << "sin(π/2) = " << sin(pi/2) << endl; // 输出: 1cout << "cos(π) = " << cos(pi) << endl;     // 输出: -1// 对数运算cout << "自然对数ln(e) = " << log(exp(1)) << endl; // 输出: 1cout << "常用对数log10(100) = " << log10(100) << endl; // 输出: 2return 0;
}
http://www.dtcms.com/a/471861.html

相关文章:

  • 网站运营管理方案怎么判断网站被k
  • [Power BI] CALCULATE函数
  • 网站流量建设dz论坛网站建设
  • 公司网站推广执行方案怎么做国际货运代理外贸网站
  • 潍坊建设网站公司电话附近最好的装修公司
  • 做商品网站需要营业执照做网站带来的好处
  • 英文建站模板外贸用什么网站开发客户
  • 西安响应式网站设计金湖企业网站制作
  • SciPy 信号处理解析:滤波、时频分析与噪声去除
  • 做前端网站要注意哪些网站建设水平如何评价
  • 自己做网站需要做啥dw做简单小说网站
  • 广西钦州住房与城乡建设局网站莱芜网站建设优化
  • 苏州北京网站建设免费的黄冈网站有哪些下载软件
  • 织梦cms怎么打不开网站什么是网络营销的重要特点
  • 02-数据类型与基本语法-练习
  • 利用SQL脚本批量测试电子表格插件rusty_sheet 0.2.读取各种格式文件
  • 网站专栏建设推荐成都网站建设
  • springboot集成ZeroMQ
  • 萧县建设局网站wordpress加密授权
  • 钽电容和贴片电容
  • 地方门户类网站怎么找回网站
  • 做啥类型网站唐山建站公司模板
  • 东莞网站建设总结电话营销系统
  • 郑州营销型网站推广做网络推广费用
  • 杭州网站建设公司官网建设工程教育网一建论坛
  • 个人网站企业网站优化教程网官网
  • GAMESS 在 Ubuntu 24.04 平台上的编译与配置
  • 网站用户粘度房地产网站怎么建设
  • 电商平台怎么入手seo外链网站大全
  • 南昌做兼职的网站如何做网站策划案