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 都是 辣鸡 很慢,千万别用。 最好自己写。

感谢大家阅读。。!

最新文章

  1. 只需2分钟,简单构建velocity web项目
  2. 【 2013 Multi-University Training Contest 3 】
  3. 如何 在远程虚拟机 里 破解 最新版 SQL Prompt
  4. csu 1812: 三角形和矩形 凸包
  5. mysql探究之null与not null
  6. Third scrum meeting - 2015/10/28
  7. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
  8. python twisted启动定时服务
  9. JVM内存配置
  10. 【python】import 模块、包、第三方模块
  11. Android 4.4 新特性分析-15项大改进!
  12. _00023 Kafka 奇怪的操作_001它们的定义Encoder达到Class数据传输水平和决心
  13. 安装Oracle时可能碰到的常见问题-1
  14. 【机器学习】SVM核函数
  15. java整合flex
  16. Dynamics CRM 检测访问CRM延迟及带宽的工具
  17. MySQL的Limit详解
  18. Runtime单例模式类 -- 控制电脑关机
  19. 利用ML&amp;AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
  20. golang 自定义json解析

热门文章

  1. (六)c#Winform自定义控件-单选框
  2. Mac如何前往文件夹 修改hosts文件 显示隐藏文件 Mac如何查看剪切板
  3. React 多副本问题
  4. LoRaWAN stack移植笔记(六)_调试2
  5. Shell--&gt;变量的数值计算
  6. 使用jQuery.extend创建一个简单的选项卡插件
  7. UGUI的图集处理方式-SpriteAtlas的前世今生
  8. MSIL实用指南-生成for语句
  9. React生命周期函数理解
  10. Delphi - cxGrid连接Oracle数据库