STL 补档
STL 补档
1.vector
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
它会动态申请空间,每新进来一个元素,就申请一个。申请着申请着你就MLE了(开玩笑的)。
#include <vector>
using namespace std;
vector<int> vec;
vec.push_back(a);
cout<<vec[0]<<endl;
vector<int>::iterator it;//使用迭代器访问元素.
for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;
vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a
vec.erase(vec.begin()+2);//删除第3个元素
部分参考https://www.cnblogs.com/msymm/p/9006022.html 感谢!!
2.deque
容器属性
序列 | 动态数组 | Allocator-aware
序列容器的元素按严格线性排列,可按顺序访问它们的位置;
动态数组允许直接访问其任何元素,可快速在序列首尾相对快速进行元素添加 / 删除;
容器通过 allocator 对象动态处理存储需求
除了写起来方便之外,时间复杂度很垃圾。。。
迭代器相关函数:
(public member function )
begin
将迭代器返回到开头(增长方向:begin -> end)
end
将迭代器返回到结尾
rbegin
返回反向迭代器以反向开始(增长方向:rbegin -> rend)
rend
将反向迭代器返回到反向结束
cbegin(C++11)
将const_iterator返回到开头(与begin类似,区别在于begin指向的值可以改变,cbegin指向的值不可改变)
cend(C++11)
将const_iterator返回到开头末尾
crbegin(C++11)
返回const_reverse_iterator以反向开始
crend(C++11)
将const_reverse_iterator返回到反向结束
参考https://blog.csdn.net/Chnyac/article/details/82710050 感谢!!
3.list
是一个双向链表
关联容器:
4.set/multiset
multiset和set 可较快完成对一组数据的常规操作,包括:
https://i.loli.net/2019/07/29/5d3e527f880fd96629.png
multiset允许元素重复出现 set 保证元素唯一性,不允许元素重复
set操作:
#include<iostream>
#include<set> //引入set库
using namespace std;
int main() {
set<int> s; //定义包含整数的set
set<int>::iterator it; //定义迭代器
s.insert(8); //插入元素
s.insert(6);
s.insert(6);
s.insert(6);
//循环输出所有元素
for(it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
return 0;
}
#include<iostream>
#include<set> //引入set库
using namespace std;
int main() {
set<int> s; //定义包含整数的set
set<int>::iterator it; //定义迭代器
s.insert(6);
s.insert(6);
cout<<s.count(6)<<endl; //返回6的个数
cout<<s.count(7)<<endl;
return 0;
}
#include<iostream>
#include<set>
using namespace std;
int main() {
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(3);
cout<<s.size(); //求总数
return 0;
}
#include<iostream>
#include<set> //引入set库
using namespace std;
int main() {
set<int> s; //定义包含整数的set
set<int>::iterator it; //定义迭代器
s.insert(8); //插入元素
s.insert(6);
s.erase(6); //删除元素
s.erase(6);
for(it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
return 0;
}
#include<iostream>
#include<set> //引入set库
using namespace std;
int main() {
set<int> s; //定义包含整数的set
set<int>::iterator it; //定义迭代器
s.insert(6);
if(s.find(6)!=s.end())cout<<"Found!"<<endl;
else cout<<"Not found!"<<endl;
if(s.find(7)!=s.end())cout<<"Found!"<<endl;
else cout<<"Not found!"<<endl;
return 0;
}
5.map/multimap
一个映射
操作有:
#include<iostream>
#include<map>
using namespace std;
int main(){
map<char,int> d;
map<char,int>::iterator it;
// insert some values:
d['a']=10; d['b']=20;
d['c']=30; d['d']=40;
d['e']=50; d['f']=60;
it=d.find('b');
if(it!=d.end()) d.erase(it); // erasing by iterator
d.erase('c'); // erasing by key
d.erase('x'); // erasing by key
// show content:
for(it=d.begin(); it!=d.end(); ++it)
cout<<it->first<<" "<<it->second<<endl;
return 0;
}
#include<iostream>
#include<map>
using namespace std;
int main (){
map<char,int> d;
map<char,int>::iterator it;
d['a']=50; d['b']=100;
d['c']=150; d['d']=200;
it=d.find('b');
if(it!=d.end())
d.erase(it);
cout<<"a => "<<d.find('a')->second<<endl;
cout<<"c => "<<d.find('c')->second<<endl;
cout<<"d => "<<d.find('d')->second<<endl;
return 0;
}
#include<iostream>
#include<map>
using namespace std;
int main(){
map<char,int> d;
d['a']=101;
d['b']=202;
d['c']=302;
//cout<<d['x']<<endl;
cout<<d.size()<<endl;
return 0;
}
// accessing mapped values
#include<iostream>
#include<map>
#include<string>
int main(){
std::map<char,std::string> mymap;
mymap['a']="an element";
mymap['b']="another element";
mymap['c']=mymap['b'];
std::cout << "mymap['a'] is " << mymap['a'] << '\n';
std::cout << "mymap['b'] is " << mymap['b'] << '\n';
std::cout << "mymap['c'] is " << mymap['c'] << '\n';
std::cout << "mymap['d'] is " << mymap['d'] << '\n';
std::cout << "mymap now contains " << mymap.size() << " elements.\n";
return 0;
}
/*
Notice how the last access (to element 'd')
inserts a new element in the map with that key
and initialized to its default value (an empty string)
even though it is accessed only to retrieve its value.
Member function map::find does not produce this effect.
*/
#include<iostream>
#include<map>
using namespace std;
int main(){
map<char,int> d;
map<char,int>::iterator it;
d['b'] = 100;
d['a'] = 200;
d['c'] = 300;
// show content:
for(it=d.begin();it!=d.end();++it)
cout<<it->first<<" "<<it->second<<endl;
for(it=d.begin();it!=d.end();++it)
cout<<(*it).first<<" "<<(*it).second<<endl;
return 0;
}
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<char,string> d;
d['a']="wawawa";
d['b']="hahaha";
d['c']=d['a'];
d['b']="hohoho";
cout<<d['a']<<endl;
cout<<d['b']<<endl;
cout<<d['c']<<endl;
cout<<d['x']<<endl;
return 0;
}
共有的成员函数:
empty size swap
至于我前面讲的 stack queue 都是 辣鸡 很慢,千万别用。 最好自己写。
感谢大家阅读。。!
STL 补档的更多相关文章
- 图论补档——KM算法+稳定婚姻问题
突然发现考前复习图论的时候直接把 KM 和 稳定婚姻 给跳了--emmm 结果现在刷训练指南就疯狂补档.QAQ. KM算法--二分图最大带权匹配 提出问题 (不严谨定义,理解即可) 二分图 定义:将点 ...
- [补档] 大假期集训Part.1
新博客搭起来先补一发档... 那就从大假期集训第一部分说起好了QwQ 自己还是太菜掉回了2016级水平 day1: day1的时候来得有点晚(毕竟准高一)然后进机房发现早就开考了还没有给我题面于是搞了 ...
- 软件安装配置笔记(三)——ArcGIS系列产品安装与配置(补档)(附数据库连接及数据导入)
在前两篇安装配置笔记之后,就忘记把其他安装配置笔记迁移过来了,真是失误失误!趁现在其他文档需要赶紧补上. 目录: 一.ArcMap 二.ArcMap连接数据库并导入数据 三.Arcgis Pro 四. ...
- [补档][ZJOI2007] 报表统计
[ZJOI2007] 报表统计 题目 传送门 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一 ...
- 补档 Codeblocks下的文件标题栏(标签)显示方法
可能在以下链接也能看到这篇文档 我知道很多人都不知道这个到底叫啥,还不如直接一点: 文件标题栏 就是如下的效果. 解决办法: 在左上角第三个view下,打开后取消Hide editor tabs 选项 ...
- Leave It Behind and Carry On ---- 高一下期末考反思 [补档]
背景 这个学期的前\(\frac{3}{4}\), 我都是在停课集训中度过的, 先是GDKOI, 再是北京集训, 最后是GDOI, 结果GDOI还没进day3就滚粗了. 学校的内容是考完GDOI后回学 ...
- Java 高效编程(Effective Java)中文第三版(补档)
来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...
- [补档]暑假集训D8总结
%dalao 今天有两位大佬来讲课,meaty来讲了Catalan(本来说好的莫比乌斯反演呢),聪聪来讲Splay呢 至于听课笔记= =,没来得及记= = 不过好不想上树啊,上了树就下不来了 考试 仍 ...
- [补档]从OI学麻将
背景 作为一名川娃子,怎么能不懂麻将呢= = T1 さきなに~~ [咲 -Saki-] 天才麻将少女什么编 题目 二十一世纪,世界上的麻将竞技人数超过一亿,日本每年也有大规模的全国大赛来对麻将选手进行 ...
随机推荐
- 关于JSON解析的问题(js序列化及反序列化)
我们都知道,现在的开发模式都是前后端分离的,后台返回数据给前端,前端负责数据交互并渲染到页面,所以我们需要从后端接口上获取数据显示到页面上.在接受服务器端数据数据时,一般是字符串.这时,就需要用到JS ...
- 逻辑回归(Logistic Regression)详解,公式推导及代码实现
逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...
- Laravel框架内实现api文档:markdown转为html
前后端分离的工作模式于今是非常流行了,前后端工作的对接,就离开不了API文档的辅助. 根据自己以往的工作经历,以及了解的一些资讯,API文档的建立,无非以下几种方式: 1. word文档模板 2. 第 ...
- 七缸发动机预热,docker swarm + .net core 高速飙车成功
(图片来源:Microsoft Blog) 上周五上午在我们将 .net core 博客站点由 docker swarm 自动驾驶改为 docker-compose 手动驾驶后,依然发生了翻车,意料之 ...
- centos7不能连接外网
1. 首先保证虚拟机是NAT模式 2. 打开cmd窗口,输入ipconfig,查看vmnet8的ipv4地址是多少,DNS也需要记下,后面会用到 注意:vmnet8的ip要与虚拟机的网关IP在同一 ...
- PythonI/O进阶学习笔记_2.魔法函数
前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...
- 各IDE代码自用开头模板
Pycharm #!/usr/bin/env python # -*- coding: utf-8 -*- # @version : 1.0 # @Time : ${DATE} ${TIME} # @ ...
- JavaScript算法模式——动态规划和贪心算法
动态规划 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化算法.下面有一些用动态规划来解决实际问题的算法: 最少硬币找零 给定一组硬币的面额,以及 ...
- filter修改post参数
前景:公司项目web渗透测试中提出管理登录时,传输密码不能为明文,需要加密传输,但是迫于系统架构,后端代码不能修改,只能在filter中解密参数. 1.前端加密处理: <script type= ...
- 听说你不会调参?TextCNN的优化经验Tricks汇总
前言:本篇是TextCNN系列的第三篇,分享TextCNN的优化经验 前两篇可见: 文本分类算法TextCNN原理详解(一) TextCNN代码详解(附测试数据集以及GitHub 地址)(二) 调优模 ...