栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STL常用的容器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL常用的容器

STL常用容器

目录
  • STL常用容器
      • vector容器
      • pair c++内置二元组 不需要头文件
      • string
      • queue 队列
      • priority_queue 优先队列
      • stack 栈
      • deque 双端队列 速度异常的慢
      • set map multiset multimap
      • **unordered_set,unordered_map unordered_multiset unordered_multimap**
      • bitset 为了省内存 省8倍空间

常用STL有 (需要List 做算法题可以自己用数组实现,速度快,不用使用STL)

  • vector 变长数组 ,倍增思想

  • string 字符串 substr() 返回子串 ,c_str() 对应数组头指针

  • queue 队头插入push(), 返回队头front() ,pop()

  • priority_queue 优先队列 push() top() pop() 实际上是一个堆

  • stack 栈 push() top() pop()

  • deque 双端队列

  • set, map, muliset, multimap 基于平衡树(红黑树) 动态维护有序序列

  • unordered_set,unordered_map unordered_multiset unordered_multimap 哈希表

  • bitset 压位

#include
#include
#include
#include
using namespace std;

vector容器
#include
vector b(10,-3);//长度为10 值全为-3的vector
vector a;
int value=520;
a.push_back(value);//尾插
a.front();//返回第一个数
a.back();//返回最后一个数
a.size();//返回大小
a.empty();//是否为空
a.clear();//清空  不是删除
//迭代器
//返回迭代器
begin(),end();  
for(int i=0;i<10;i++) a.push_back(i);
//三种迭代方式
for(int i=0;i
	cout<::iterator替换成auto
for(vector::iterator i =a.begin();i!=a.end();i++) //相当于指针
{
    cout<<*i<<' ';
}

for(auto x:a) cout< a(4,3),b(3,4);
if(a 
pair c++内置二元组 不需要头文件 
pair p;
p.first //第一个元素
p.second //第二个元素
p = make_pair(10,"abc")
p ={20,"abc"}; 
//vector > a;//>>不要连续写 以为是插入
//sort(a);//排序默认 first关键字
//储存三个元素
pair > a;

string
#include
string a;
a.size();
a.empty();
a.clear();
a= "abc";
a+="c";//--> a="abcc"
cout< 
queue 队列 
#include
queue a;
a.push();
a.empty();
a.front();
a.back();
a.pop();
a.size();
//注意没有a.clear()函数
//想要清空怎么办?
a = queue();//就行了
priority_queue 优先队列
#include
priority_queue heap;//默认大根堆
//如何定义小根堆? 也可以用x的相反数插入
#include
priority_queue ,greater > heap;


stack 栈
#include
stack a;
a.push();
a.size();
a.top();
a.pop();
deque 双端队列 速度异常的慢
#include
deque a;
a.size();
a.empty();
a.clear();
a.front();a.back();
a.push_back();a.pop_back();
a.push_fron();a.pop_front();
a.begin();a.end();
//也可以用 a[i]访问
set map multiset multimap
//都支持的函数
size();
empty();
clear();//都支持
begin();
end();


#include
set s;
//set/multiset(后者元素可重复)
int value= 1;
s.insert(value); //都是O(logn)
s.find(value);
s.count(value);//计算某个数的个数 set只有01两种情况 multiset有多种
s.erase(value);//删除一个数  o(logn+k)
s.erase(iterator);//删除迭代器 
s.lower_bound(value);//返回>=value的最小的数的迭代器 不存在返回end()
s.upper_bound(value);//返回>value的最小的数

//map multimap
#include
map m;//储存映射关系
m.insert({1,2});
m.erase({1,2});
m.find({1,2});
m[1]==2;//可以当数组用 但是O(logn)
m.lower_bound(),m.upper_bound();
unordered_set,unordered_map unordered_multiset unordered_multimap
//和上面类似 时间复杂度为O(1)
//但是不支持lower_bound() 和upper_bound() 不支持迭代器++ --
#include
undered_map a={{"yt",1},{"wjx",2},{"lxw",3}};
printf("%dn",a["yt"]);//  1
bitset 为了省内存 省8倍空间
//比如你想要 10000*10000的bool矩阵   10^8 B
//此时100MB了
#include
bitset<10000> s;
//支持 ~,&,|,^,>>,<<,==,!=,[]
s.count();//返回有多少个1
s.any();//判断是否至少有一个1
s.none();//判断是否全为0
s.set();//所有位置变成1
s.set(k,v);//把k位变为0
s.reset();//所有置为0
s.flip();//等价与~
s.flip(k);//第k位取~

   bitset<2> bitset1(12);  //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00

    string s = "100101";  
    bitset<4> bitset2(s);  //s的size=6,而bitset的size=4,只取前面部分,即1001

    char s2[] = "11101";
    bitset<4> bitset3(s2);  //与bitset2同理,只取前面部分,即1110

    cout << bitset1 << endl;  //00
    cout << bitset2 << endl;  //1001
    cout << bitset3 << endl;  //1110
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号