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更方便

感谢大家阅读。。!

posted @ 2019-07-29 09:55  HATU  阅读(234)  评论(0编辑  收藏  举报