欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STL 补档

程序员文章站 2023-02-07 15:06:54
STL 补档 1.vector 作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的 "模板类" 和函数库。 c++ include incl ......

stl 补档

1.vector

作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在c++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的和函数库。

#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)


将迭代器返回到结尾


返回反向迭代器以反向开始(增长方向:rbegin -> rend)


将反向迭代器返回到反向结束

(c++11)
将const_iterator返回到开头(与begin类似,区别在于begin指向的值可以改变,cbegin指向的值不可改变)

(c++11)
将const_iterator返回到开头末尾

(c++11)
返回const_reverse_iterator以反向开始

(c++11)
将const_reverse_iterator返回到反向结束

参考https://blog.csdn.net/chnyac/article/details/82710050 感谢!!

3.list

是一个双向链表

关联容器:

4.set/multiset

multiset和set 可较快完成对一组数据的常规操作,包括:

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

感谢大家阅读。。!