【STL基本用法】

简介: vector:动态数组(可变长数组,倍增的思想) size() 返回元素的个数(所有的SLT容器都有,O(1)) empty() 返回是否为空 (所有的SLT容器都有) clear() 清空 front()/back() 返回vector第一个/最后一个数 push_back()/pop_back() 在vector最后插入一个数/把最后一个元素删除 begin()/end() 迭代器,begin

vector

vector:动态数组(可变长数组,倍增的思想)
    size()                      返回元素的个数(所有的SLT容器都有,O(1))
    empty()                     返回是否为空  (所有的SLT容器都有)
    clear()                     清空
    front()/back()              返回vector第一个/最后一个数
    push_back()/pop_back()      在vector最后插入一个数/把最后一个元素删除
    begin()/end()               迭代器,begin()是vector第0个数,end()是vector最后一个数的后一位数
    []                          []通过下标,可以取值、修改,但不能添加
    支持比较运算,按字典序(随机寻值,与数组一样)
    
pair<int, string>                存储二元组(俩个类型任意)         
    first,第一个元素
    second第二个元素
    支持比较运算,以first为第一关键字,以second为第二关键字(字典序)
pair<int, pair<char, string>>    存储三元组(三个类型任意)     

倍增思想:

  • 系统为某一线程(程序)分配空间时,所需的时间与空间大小无关,与申请次数有关
  • 优化:尽量减少空间申请次数,可以浪费空间。
  • 当空间大小不足时,vector会重新在申请一个空间,该空间是之前空间的2倍,并把元素,拷贝到新空间中去。
# -----------vector初始化----------------------------------------
vector<int> a; 
vector<int> a(10);               定义长度为10的vector,且默认值都为0
vector<int> a(10, 3);            定义长度为10的vector,且都初始化为3   
vector<int> a[10];               定义vector数组,定义了10个vector


# ---------遍历vector的三种方式----------------------------------------------------
for (int i = 0; i < a.size(); i ++)   cout << a[i] << " ";
for (vector<int>::iterator i = a.begin(); i != a.end(); i ++ )   cout << *i << " ";

//当类型比较长,可以写成auto,可以自动帮我们推断出类型
for (auto i = a.begin(); i != a.end(); i ++ )  
for (auto x : a)   cout << x << " ";

#----------支持比较运算--------------------------------
vector<int> a(4,3), b(3, 4);
if (a < b) puts("a < b"); 
输出结构为a < b

#---------pair初始化方式-----------------------------
pair<int, string> p;
p = make_pair(10, "xdm");
p = {20, "xdm"};

string

string 字符串, 
    substr(a, b)    返回某一个子串 ,下标从a开始,返回子串的长度是b。当b的值非常大,超出了字符长度,此时会输出到最后一个字母为止。
    c_str()         返回字符串数组的起始地址
    size()/length() 返回字符串长度
    empty()
    clear()
string a = 'xdm";
a += "wan";
a += 'c';
cout << a;              //xdmwanc
cout << a.substr(1,3)   //dmw
cout << a.substr(1, 10) //dmwanc
cout << a.substr(1);    //dmwanc
printf("%s\n", a.c_str);//xdmwanc 

queue

queue, 队列(先进先出)
    size()
    empty()
    push()                       向队尾插入一个元素
    pop()                        弹出队头元素
    front()                      返回队头元素
    back()                       返回队尾元素
queue<int> q;    
q = queue<int> ();   //queue没有clear操作,可以用这种方法进行清空

priority_queue

priority_queue,优先队列,用堆实现的,默认大根堆
    push()                   插入一个元素
    top()                    返回堆顶元素
    pop()                    弹出堆顶元素
priority_queue<int> heap;        默认大根堆

#定义成小根堆有俩种方法
heap.push(-x);                   -x从大到小,也就是x从小到大    
priority_queue<int, vector<int>, greater<int>> heap;
   

stack

stack, 栈
    size()
    empty()
    push()                       向栈顶插入一个元素
    top()                        返回栈顶元素
    pop()                        弹出栈顶元素

deque

deque,双端对列
    size()
    empty()
    clear()
    front()/back()
    push_bakc()/pop_back()
    push_front()/pop_front()
    begin()/end()
    []

set/mutiset

set, map, mutiset, mutimap, 基于平衡二叉树(红黑树),动态维护有序序列
公有的操作:
    size()
    empty()
    clear()
    begin()/end()  ++, --   返回前驱和后继,时间复杂度O(logn)
    
 set/mutiset  (key = value)              元素自动排好序
    set元素不可以重复,mutiset元素可以重复
 
     insert()                插入一个数
     find()                  查找一个数,不存在返回end迭代器
     count()                 返回某一个数的个数
     erase()     
            1. 输入一个数x,删除所有x     O(k + logn)
            2. 输入一个迭代器,删除这个迭代器
    lower_bound()/upper_bound()
          1. lower_bound(x)  返回大于等于x的最小的数的迭代器
          2. upper_bound(x)  返回大于x的最小的数的迭代器

map/mutimap

map/mutimap                  所有元素按照key自动排序
    map所有的元素是pair,拥有key和value
    map 不允许俩个元素拥有相同的键值
    mutimap 允许俩个元素拥有相同的键值
    map迭代器不允许改变map元素的key,否则影响排序,但是可以修改value
    
    insert()                插入的数是一个pair
    erase()                 输入的参数是pair或迭代器
    find()          
    []                      核心: 时间复杂度为O(logn) mutimap没有该操作
    lower_bound()/upper_bound()
    
map<string, int> a;
a["xdm"] = 1;
cout << a["xdm"] << endl;    // 1

unorder_set, unorder_map, unorder_mutiset, unorder_mutimap

 unorder_set, unorder_map, unorder_mutiset, unorder_mutimap
 
    和上面类似,增删改查的时间复杂度是    O(1)
    不支持lower_bound()/upper_bound(),   迭代器的 ++, --

bitset

bitset,  压位
    bitset<10000> s;
    ~, &, |, ^
    >>, <<
    ==, !=
    []
    count()       返回有多少个1
    any()         判断是否至少有一个1
    none()        判断是否全为0
    set()         把所有的位置为1
    set(k ,v)     把第k位置为1
    reset()       把所有位置为0
    flip()        等价于~
    flip(k)       把第k位取反
目录
相关文章
|
弹性计算 运维 监控
快速部署 Nginx 社区版
Nginx是一个高性能的HTTP和反向代理服务器。Nginx在计算巢上提供了社区版服务,您无需自行配置云主机,即可在计算巢上快速部署Nginx服务、实现运维监控,从而方便地基于Nginx搭建您自己的应用。本文介绍使用如何通过计算巢快速部署Nginx社区版。
快速部署 Nginx 社区版
|
监控 数据可视化 搜索推荐
营销人必看:复盘工具选对,效率直接翻倍
营销活动的结束并非任务的终点,而是优化的起点。复盘作为营销闭环中的关键环节,旨在总结经验、发现问题,并为后续策略提供数据支撑和方向指引。本文系统解析了如何高效完成有价值的复盘,涵盖目标回顾、数据拆解、策略优化及团队协作等方面,助力营销能力持续升级。通过明确复盘的核心价值(数据沉淀、策略校准、团队共识),避免常见误区,确保复盘真正推动营销进化,构建可持续的增长飞轮。
959 12
|
云安全 人工智能 安全
阿里云网络安全体系解析:如何构建数字时代的"安全盾牌"
在数字经济时代,阿里云作为亚太地区最大的云服务提供商,构建了行业领先的网络安全体系。本文解析其网络安全架构的三大核心维度:基础架构安全、核心技术防护和安全管理体系。通过技术创新与体系化防御,阿里云为企业数字化转型提供坚实的安全屏障,确保数据安全与业务连续性。案例显示,某金融客户借助阿里云成功拦截3200万次攻击,降低运维成本40%,响应时间缩短至8分钟。未来,阿里云将继续推进自适应安全架构,助力企业提升核心竞争力。
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
1498 1
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
1440 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
数据可视化 Python
Python中绘制3D曲面图的艺术
【7月更文挑战第4天】使用Python的Matplotlib和mpl_toolkits.mplot3d库,可以轻松绘制3D曲面图。首先安装matplotlib,然后导入numpy和相关模块。通过定义函数和使用numpy的meshgrid生成数据,接着用`plot_surface`绘制曲面,可定制色彩映射、添加标签、标题、色标、透明度和阴影。通过自定义颜色映射和添加网格线,能进一步增强图形的解读性。这些技巧使3D数据可视化更具洞察力和吸引力。
|
存储 机器学习/深度学习 算法
如何准确的估计llm推理和微调的内存消耗
最近发布的三个大型语言模型——Command-R+ (104B参数), Mixtral-8x22b (141B参数的MoE模型), 和 Llama 3 70b (70.6B参数)——需要巨大的内存资源。推理时,Command-R+需193.72GB GPU RAM,Mixtral-8x22B需262.63GB,Llama 370b需131.5GB。激活的内存消耗根据序列长度、批大小等因素变化。文章详细介绍了计算这些模型内存需求的方法,并探讨了如何通过量化、优化器优化和梯度检查点减少内存使用,以适应微调和推理。
2840 0
|
中间件 PHP 开发者
深入解析 Laravel 中的 HTTP 中间件
【8月更文挑战第31天】
237 0
大学物理(上)-期末知识点结合习题复习(5)——刚体力学-转动惯量、力矩、线密度 面密度 体密度、平行轴定理和垂直轴定理、角动量定理和角动量守恒定律
大学物理(上)-期末知识点结合习题复习(5)——刚体力学-转动惯量、力矩、线密度 面密度 体密度、平行轴定理和垂直轴定理、角动量定理和角动量守恒定律
487 0
|
程序员 C++
C/C++程序的内存开辟
C/C++程序的内存开辟

热门文章

最新文章