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 补档的更多相关文章

  1. 图论补档——KM算法+稳定婚姻问题

    突然发现考前复习图论的时候直接把 KM 和 稳定婚姻 给跳了--emmm 结果现在刷训练指南就疯狂补档.QAQ. KM算法--二分图最大带权匹配 提出问题 (不严谨定义,理解即可) 二分图 定义:将点 ...

  2. [补档] 大假期集训Part.1

    新博客搭起来先补一发档... 那就从大假期集训第一部分说起好了QwQ 自己还是太菜掉回了2016级水平 day1: day1的时候来得有点晚(毕竟准高一)然后进机房发现早就开考了还没有给我题面于是搞了 ...

  3. 软件安装配置笔记(三)——ArcGIS系列产品安装与配置(补档)(附数据库连接及数据导入)

    在前两篇安装配置笔记之后,就忘记把其他安装配置笔记迁移过来了,真是失误失误!趁现在其他文档需要赶紧补上. 目录: 一.ArcMap 二.ArcMap连接数据库并导入数据 三.Arcgis Pro 四. ...

  4. [补档][ZJOI2007] 报表统计

    [ZJOI2007] 报表统计 题目 传送门 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一 ...

  5. 补档 Codeblocks下的文件标题栏(标签)显示方法

    可能在以下链接也能看到这篇文档 我知道很多人都不知道这个到底叫啥,还不如直接一点: 文件标题栏 就是如下的效果. 解决办法: 在左上角第三个view下,打开后取消Hide editor tabs 选项 ...

  6. Leave It Behind and Carry On ---- 高一下期末考反思 [补档]

    背景 这个学期的前\(\frac{3}{4}\), 我都是在停课集训中度过的, 先是GDKOI, 再是北京集训, 最后是GDOI, 结果GDOI还没进day3就滚粗了. 学校的内容是考完GDOI后回学 ...

  7. Java 高效编程(Effective Java)中文第三版(补档)

    来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...

  8. [补档]暑假集训D8总结

    %dalao 今天有两位大佬来讲课,meaty来讲了Catalan(本来说好的莫比乌斯反演呢),聪聪来讲Splay呢 至于听课笔记= =,没来得及记= = 不过好不想上树啊,上了树就下不来了 考试 仍 ...

  9. [补档]从OI学麻将

    背景 作为一名川娃子,怎么能不懂麻将呢= = T1 さきなに~~ [咲 -Saki-] 天才麻将少女什么编 题目 二十一世纪,世界上的麻将竞技人数超过一亿,日本每年也有大规模的全国大赛来对麻将选手进行 ...

随机推荐

  1. Java初学心得(一)

    Java中基本组成单元是类,在类中又包含属性和方法. 每个应用程序都包含一个main()方法,main方法里的称为主类. 一,基本变化 ①全局变量:在类中的属性 局部变量:在方法中的属性 ②基本数据类 ...

  2. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  3. c# NPOI 导出23万条记录耗时12秒

    先上测试代码: string connectionString = "Server=localhost;Initial Catalog=******;User ID=sa;Password= ...

  4. Kafka 系列(三)—— Kafka 生产者详解

    一.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发 ...

  5. Spring 核心技术(6)

    接上篇:Spring 核心技术(5) version 5.1.8.RELEASE 1.5 Bean 作用域 创建 bean 定义时,你创建了一种用于创建 bean 定义中定义的类实例的方法.bean定 ...

  6. caddy(四)Run详解

    caddy(四)Run详解 前言 平时我们使用 caddy 都是使用 它的 二进制 分发文件,我们现在来分析 caddy 的 Run 函数.从最外层抽象的看它都做了些什么. Caddy Run 我们来 ...

  7. 《深入理解Java虚拟机》- JVM如何进行异常处理

    一.Java异常 在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环境,例如用户的坏数据.试图打开一个不存在的文件等.为了能够及时有效地处理程序中的运行错误,Java 专门 ...

  8. VSCode 使用Settings Sync同步配置(最新版教程,非常简单)

    VSCode 使用Settings Sync同步配置(最新版教程,非常简单) 之前无意中听到有人说,vsCode最大的缺点就是每次换个电脑或者临时去个新环境,就要配置一下各种插件,好不麻烦,以至于面试 ...

  9. ip地址、域名、DNS、URL的区别与联系

    IP:每个连接到Internet上的主机都会分配一个IP地址,此ip是该计算机在互联网上的逻辑地址的唯一标识,计算机之间的访问就是通过IP地址来进行的.写法:十进制的形式,用“.”分开,叫做“点分十进 ...

  10. 用代码说话:synchronized关键字和多线程访问同步方法的7种情况

    synchronized关键字在多线程并发编程中一直是元老级角色的存在,是学习并发编程中必须面对的坎,也是走向Java高级开发的必经之路. 一.synchronized性质 synchronized是 ...