0x00 语法知识
C++ STL
Vector
变长数组,在末尾进行元素增删
声明
#include<vector>
vector<int>a;//长度动态变化的数组
vector<int> b[233];//第二维长度变化
vector<int> a(10)//包含 10 个 int 类型,默认值 0
vector<int> b(10,3)//初始值为 5
struct rec{...};vector<rec> c;//结构体类型
vector<int>::iterator it;//迭代器(指针)
size/empty
size()返回实际长度,empty()返回bool类型检测是否为空clear 清空
vectorbegin/end
begin()返回第一个元素,end()返回最后一个元素的下一个元素(边界)//遍历
for(int i=0;i<a.size();i++)
cout<<a[i]<<endl;
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
cout<<*it<<endl;
for(auto x:a) cout<<x<<endl;
front/back
front()返回第一个元素,back()返回最后一个元素vector<int> a({1,2,3});
cout<<a.front()<<" "<<a[0]<<endl;
cout<<a.back()<<" "<<a[a.size()-1]<<endl;
push_back/pop_back
push_back()把元素插入到尾部,pop_back()删除最后一个元素 O(1)a.push_back(4);
a.pop_back();
支持按字典序比较运算
vector<int> a(4,3),b(3,4);
if(a<b) puts("a<b");
Pair
存储一对值
声明
pair<int,double> p;//存储 int 和 double 的 pair
pair<int,double> p(1,3.14);//初始化
pair<int,string> p=make_pair(10,"abc");//用 make_pair 构造
p=(20,"abc");//C++11
pair<string,pair<int,int>> p;//存储三个数据
first/second
a.first/a.second访问第一个和第二个数据
String
size/length 返回字符串长度
empty 检查是否为空
clear 清空字符串
c_str
a.c_str()返回字符串a的起始地址append
向字符串末尾添加内容
a+="def";
a.append("hij");//添加 "hij"
a.append(n,'*');//添加 n个字符
a.append(str,pos,len);//从位置 pos开始添加长度为 len的字符串
substr
提取字串,
a.substr(3,5)表示从下标为3开始提取5个字符,若超出字符串长度,只输出到字符串末尾,a.substr(3)表示从3开始的整个子串insert
a.insert(5,"hello");//在位置 5 插入
a.insert(pos,n,c);//在位置 pos插入 n个字符 c
a.insert(pos,str,subpos,sublen);//将子字符串 str从 subpos起 sublen长度的子串插入到位置 pos
find
a.find(str);//在 a中查找子字符串/字符 str
a.find(str,pos);//从位置 pos开始查找
replace
replace(pos,len,str);//从 pos开始替换 len个字符为字符串 str
replace(pos,len,c);//从 pos开始替换 len个字符 变为 n个字符 c
Queue
包含 循环队列queue 和 优先队列priority_queue(堆) 两个容器
声明
#include<queue>
queue<int> q;
queue<double> a;
pirority_queue<int> a;//大根堆
pirority_queue<int,vector<int>,greater<int>> b;//小根堆
pirority_queue<pair<int,int>> q;//双元组
struct rec
{
int a,b;
bool operator< (const rec& t) const
{
return a < t.a;
}//重载小于号
};
priority_queue<rec> q;
//用大根堆重载小于号,用小根堆重载大于号
priority_queue<rec,vector<rec>,greater<rec>> d;
queue
push 从队尾插入
pop 从队头弹出
front 返回队头元素
back 返回队尾元素
priority_queue(默认大根堆)
- push 把元素插入堆
- pop 删除堆顶元素(最大值)
- top 查询堆顶元素(最大值)
q=queue();
无
clear函数,重新触发使之清除
Stack
头文件
#include<stack>push 向栈顶插入
pop 弹出栈顶元素
stack<int> stk;
stk.push(1);
stk.pop();
Deque
支持在两端插入删除,速度较慢
头文件
#include<deque>begin/end 返回
deque的头/尾迭代器front/back 队头/队尾元素
push_back 从队尾入队
push_front 从队头入队 \(O(1)\)
pop_back 从队尾出队
pop_front 从队头出队 \(O(1)\)
clear 清空队列
deque<int> a;
a.begin(),a.end();
a.front(),a.back();
Set
包括 有序集合set 和 多重有序集合multiset 两个容器,内部实现是一颗红黑树
声明
#include<set>
set<int> s;
struct rec
{
int x,y;
bool operator< (const rec& t) const
{
return x < t.x;
}//重载小于号
};set<rec> s;
multiset<double> s;
set<int>::iterator it;
size/empty/clear \(O(1)\)
begin/end
指向集合首尾迭代器 \(O(1)\)
begin指向最小元素的迭代器,end指向最大元素下一个位置的迭代器insert
插入元素,若元素已存在则不重复插入 \(O(\log n)\)
if(a.find(x)==a.end())//判断x在a中是否存在
lower_bound/upper_bound
//找到大于等于 x 的最小元素的迭代器
s.lower_bound(x);
//找到大于 x 的最小元素的迭代器
s.upper_bound(x);
erase
s.erase(it)
//删除迭代器 it 指向的元素 O(log n)
s.erase(x)
//删除所有等于 x 的元素 O(k + log n) k是 x的个数
count
s.count(x)
//返回等于 x 的元素个数 O(k + log n) k 为元素 x 的个数
unordered_set
底层实现为哈希表,无
lower_bound/upper_bound,复杂度\(O(1)\),可以存储重复元素#include<unordered_set>
unordered_set<int> s;
unordered_multiset<int> b;
Map
键值对 key_value 的映射,内部实现是一颗以key为关键码的红黑树,Map的key和value可以是任意类型,其中key必须定义为小于号运算符
声明
#include<map>
map<key_type,value_type> name;
map<string,int> hash;
map<pair<int,int>,vector<int>> test;
map<string,vector<int>> a;
a["abc"]=vector<int>({1,2,3,4});
cout<<a["abc"][2]<<endl;
size/empty/clear/begin/end 均与
set类似insert/erase 均类似,但参数均是
pair<key_type,value_type>find
h.find(x)
//在变量名为 h 的 map 中查找 key 为 x 的二元组
[ ]操作符
h[key]//返回 key 映射的 value 的引用 O(log n)
map<string,int> a;
a["abc"]=1;cout<<a["abc"];
unordered_map
#include<unordered_map>
unordered_map<int> c;
Bitset
压位
支持操作符:~ & | ^ >> << == != [ ]
声明
#include<bitset>
bitset<100> b;//长度为 100的 01串,初始化为 0
bitset<Size> b("11010101");//二进制字符串初始化
bitset<8> b(255);//整数初始化
count
a.count()返回 1 的个数any/none
a.any()判断是否至少有一个 1,a.none()判断是否全为 0,是则返回true,否则返回falseset/reset
a.set();//把所有位置成 1
a.set(k,v);//把第 k位变成 v
a.reset();//把所有位变成 0
flip
a.filp();//等价于 ~
a.filp(k);//把第 k 位取反
Algorithm库函数
Reverse
翻转 O(1)
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int> a({1,2,3,4,5});
int b[]={1,2,3,4,5};
reverse(a.begin(),a.end());
reverse(a,a+5);
}
Unique
去重,返回去重之后的尾迭代器,可计算出去重后元素个数,使用前元素必须有序
int a[]={1,1,2,2,3,3,4};
vector<int> a({1,1,2,2,3,3,4});
int m=unique(a,a+7)-a;
int n=unqiue(b.begin(),b.end())-b.begin();
//b.erase(unqiue(b.begin(),b.end()),b.end);删除后面的元素
cout<<m<<endl<<n<<endl;
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
vector<int>::iterator unique(vector<int> &a)//具体实现
{
int j=0;
for(int i=0;i<a.size();i++)
if(!i || a[i]!=a[i-1])
a[j++]=a[i];
return a.begin()+j;
}
Random_shuffle
#include<ctime>
srand(time(0));//1970.1.1到现在的秒数
random_shuffle(a.begin(),a.end());
Sort
//通过 cmp 实现
struct rec
{
int x,y;
}a[5];
bool cmp(int a,int b)//a 是否排在 b 的前面
{
return a>b
}
sort(a+1,a+1+n,cmp);//从 a[1] 开始排序
//通过重载实现
struct Rec
{
int a,b;
bool operator < (const Rec &t) const
{
return x < t.x;
}
}a[5];
sort(a,a+n);
Lower_bound/Upper_bound
lower_bound在两个迭代器指定的部分二分查找,返回指向第一个大于等于 第三个参数 的元素的迭代器
upper_bound查找第一个大于 第三个参数 的元素
指定部分应提前排好序
//查找大于等于 x 的最小整数的下标
int i=lower_bound(a+1,a+1+n,x)-a;
//查找小于等于 x 的最大整数
int y=*--upper_bound(a.begin(),a.end(),x);
位运算
符号
- & 与
- | 或
- ~ 非
- ^ 异或
- >> 右移
- << 左移
常用操作
求 x 的第 k 位数字
x >> k & 1返回 x 的最后一位 1
lowbit(x) = x & -x
0x00 语法知识的更多相关文章
- 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...
- JSP的学习(5)——语法知识三之include指令
本篇继续来对JSP语法中的JSP指令进行学习,在<JSP的学习(3)——语法知识二之page指令>中,已经介绍了JSP指令的书写格式和page指令的详细信息,所以在这一篇中我们会对JSP指 ...
- JSP的学习(3)——语法知识二之page指令
本篇接上一篇<JSP的学习(2)——语法知识一>,继续来学习JSP的语法.本文主要从JSP指令中的page指令,对其各个属性进行详细的学习: JSP指令: JSP指令是为JSP引擎而设计的 ...
- JSP的学习(2)——语法知识一
上一篇<JSP的学习>讲述了JSP的一些基础知识和底层原理,本篇将来学习JSP所需掌握的语法知识等. JSP的语法主要包括以下几个部分的内容: 1) JSP模板元素 2) ...
- thinkPHP 模板中的语法知识 详细介绍(十二)
原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件 ==>记住常量的是大写 1.css link .js sc ...
- XHtml(Xml+Html)语法知识(DTD、XSD)
那点你不知道的XHtml(Xml+Html)语法知识(DTD.XSD) 什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ ...
- RxSwift之路 1#Swift语法知识准备
RxSwift之路 1#Swift语法知识准备 在开始学习 RxSwift 之前,一定要对 Swift 相关语法有所了解,否则就很难理解为什么可以这样.关于 Swift 的学习其实只要看看 Swift ...
- Java基础语法知识你真的都会吗?
第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...
- BitBake使用攻略--BitBake的语法知识一
目录 写在前面 1. BitBake中的赋值 1.1 直接赋值 1.2 间接赋值 1.3 追加与前加赋值 1.4 Override风格的赋值语法 1.5 标志赋值 1.6 内联函数赋值 1.7 其他一 ...
- BitBake使用攻略--BitBake的语法知识二
目录 写在前面 1. BitBake中的任务 2. 任务配置 2.1 依赖 2.1.1 内部任务间的依赖 2.1.2 不同菜谱下的任务间依赖 2.1.3 运行时态下的依赖 2.1.4 递归依赖 2.1 ...
随机推荐
- MySQL5.7x 主从复制
原文链接:https://blog.liuzijian.com/post/9f8ede8e-26de-75d6-6347.html 在MySQL中,主从复制(Master-Slave Replicat ...
- ABC224
ABC224 D 题目大意 有一个九个点的无向图棋盘,上面有八个棋子,一次操作能将一个棋子沿边移到空点上,问将每个棋子移到与它编号相同的点最少几步. 解题思路 考虑使用 BFS. 用 string 存 ...
- mysl 修改数据存储位置后服务启动后停止
在 Windows 系统中安装完 mysql 后,如果是生产用的机器,通常会修改数据存储位置.基本步骤: 1. 停止 mysql 服务: 2. 修改 my.ini 文件中的 datadir=" ...
- 使用C# 调用deepseek api接口,来实现正常访问
先上图,结果如图 先去官方网站充值api费用,默认 对应的C#代码封装 1 public class DeepSeekHelper 2 { 3 private static readonly Http ...
- 百万架构师第四十一课:RabbitMq:可靠性投递和实践经验|JavaGuide
来源:https://javaguide.net RabbitMQ 2-可靠性投递与生产实践 可靠性投递 首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率 ...
- [CF603E] Pastoral Oddities 题解
注意力惊人的注意到我们可以将问题转化为所有联通块大小全部为偶数. 假如已经确认了所有加入的边,那么我们可以通过类似 \(K\) 算法的方式求解. 考虑到答案单调不升,所以每条边都有一个影响的区间.考虑 ...
- 微信企业付款到零钱(Java版)
订阅专栏1.开通条件. 商户注册超过90天且,连续30天有交易,可以每天支付1元来刷,目前测试可行.随后在微信商户平台 - 产品管理自动开启,然后需要申请. 疑问: 话说是要有公众号appid才行,但 ...
- tortoiseGit no git.exe found
运行tortoiseGit之后显示找不到git.exe 原因:没有安装git,tortoiseGit是在安装了git的基础上运行的 到这里下载git并安装:https://gitforwindows. ...
- Typecho弹出find Input author error怎么解决
大多数报错的起因就是因为,有些模板归档页面的评论功能被阉割掉了 于是导致一些评论验证功能的插件爆这个错误. #解决方法有以下三种 1,编辑这些没有评论功能的页面,高级设置,关闭评论,然后发布文章. 2 ...
- Go实现动态开点线段树
1.线段树介绍 线段树是一种用于高效处理区间查询和区间更新的数据结构,当我们需要解决一个频繁更新区间值的问题的时候,就可以采用线段树的结构进行解决.线段树的核心思想是将区间分为多个子区间进行管理,越往 ...