zoukankan      html  css  js  c++  java
  • 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'] << '
    ';
      std::cout << "mymap['b'] is " << mymap['b'] << '
    ';
      std::cout << "mymap['c'] is " << mymap['c'] << '
    ';
      std::cout << "mymap['d'] is " << mymap['d'] << '
    ';
      std::cout << "mymap now contains " << mymap.size() << " elements.
    ";
      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 都是 辣鸡 很慢,千万别用。 最好自己写。

    感谢大家阅读。。!

  • 相关阅读:
    Hibernate第二天:Hibernate的一级缓存、其他的API
    Hibernate第一天(Hibernate的环境搭建、Hibernate的API、Hibernate的CRUD)
    数据结构基础(一)数组,矩阵
    MyEclipseSVN插件百度云下载
    修改CentOS主机名
    Word中增加仿宋GB-2312字体
    Linux系统常用基本命令总结
    SpringBoot视频教程 百度云
    VM虚拟机中linux centOS 联网单网卡配置教程
    Java正则表达式匹配日期及基本使用
  • 原文地址:https://www.cnblogs.com/tushukai/p/11262250.html
Copyright © 2011-2022 走看看