STL 补档

2019-08-16 07:54:41来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

感谢大家阅读。。!


原文链接:https://www.cnblogs.com/tushukai/p/11262250.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:头部姿态估计 - OpenCV/Dlib/Ceres

下一篇:[BZOJ4379][POI2015]Modernizacja autostrady