C++STL整理
STL整理
vector
#include<bits/stdc++.h>
#define go(i,a,b) for(int i=a;i<b;i++)
using namespace std; vector<int>b(,);//赋初值,10个元素全为1
int main()
{
cout<<"b=";
go(i,,b.size())
cout<<b[i]<<" ";cout<<endl;
vector<int>a(b.begin(),b.begin()+);//赋初值,b的前3个元素
cout<<"a=";
go(i,,a.size())
cout<<a[i]<<" ";cout<<endl;
a.clear();b.clear();//清空
b.assign(,);//4个元素全为2
a.assign(b.begin(),b.begin()+);//赋为b的前2个元素
cout<<"a_front="<<a.front()<<endl;//首元素
cout<<"b_front="<<b.front()<<endl;
cout<<"is_empty"<<a.empty()<<endl;//不为空
int c[]={,,,,,,,};
vector<int>d(c,c+);//给d赋数组c
a.clear();
cout<<"d=";
go(i,,d.size())cout<<d[i]<<" ";cout<<endl;
a.assign(d.begin(),d.begin()+);//a为d前8个元素
cout<<"a_back="<<a.back()<<endl;
a.push_back();//尾部加入元素
cout<<"a_back="<<a.back()<<endl;
a.pop_back();//尾部删除元素
cout<<"a_back="<<a.back()<<endl;
a.erase(a.begin()+,a.begin()+);//删除第2-5个元素(从第0个开始)
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
a.insert(a.begin()+,);//在第2个插入4元素
a.insert(a.begin()+,,);//第3个开始插入2个0元素
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
a.erase(a.begin()+,a.begin()+);
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
a.insert(a.begin()+,c+,c+);//第2个元素开始插入数组c的2-5元素(c+5不插入)
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
cout<<"b=";go(i,,b.size())cout<<b[i]<<" ";cout<<endl;
a.swap(b);//交换a,b
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
a.swap(b);
cout<<"compare_a_b "<<(a>b)<<endl;//和字符串一样
reverse(a.begin(),a.begin()+);
cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
cout<<"find_7="<<*find(a.begin()+,a.begin()+,)<<endl;
//在第1-8(不包括8)个元素中找7,返回指针
b.resize();//把b的容量变为20,多了为随机少了删掉
cout<<"V="<<b.capacity()<<endl;//b的容量
copy(a.begin(),a.end(),b.begin()+);//从b的第二个开始被a覆盖
cout<<"b=";go(i,,b.size())cout<<b[i]<<" ";cout<<endl;
}
set
set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值(也就是集合的特性)。
set的各成员函数列表如下:
1. begin()--返回指向第一个元素的迭代器
2. clear()--清除所有元素
3. count()--返回某个值元素的个数
4. empty()--如果集合为空,返回true
5. end()--返回指向最后一个元素的迭代器
6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器
7. erase()--删除集合中的元素
8. find()--返回一个指向被查找到元素的迭代器
9. get_allocator()--返回集合的分配器
10. insert()--在集合中插入元素
11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
12. key_comp()--返回一个用于元素间值比较的函数
13. max_size()--返回集合能容纳的元素的最大限值
14. rbegin()--返回指向集合中最后一个元素的反向迭代器
15. rend()--返回指向集合中第一个元素的反向迭代器
16. size()--集合中元素的数目
17. swap()--交换两个集合变量
18. upper_bound()--返回大于某个值元素的迭代器
19. value_comp()--返回一个用于比较元素间的值的函数
#include<iostream>
#include<set>
#include<cstdio>
#include<cstring>
using namespace std;
set<int>s;
struct node
{
int x;
friend bool operator < (const node &a,const node &b)
{
return -a.x<-b.x;
}
};
set<node>ms;
int main()
{
s.insert();
s.insert();
s.insert();
s.insert();
cout<<"begin:"<<*s.begin()<<endl;
cout<<"count(1):"<<s.count()<<endl;
cout<<"end:"<<*s.end()<<endl;
cout<<"is empty:"<<s.empty()<<endl;
s.clear();
cout<<"is empty:"<<s.empty()<<endl;
s.insert();
s.insert();
s.insert();
s.insert();
cout<<"count(1):"<<s.count()<<endl;
s.erase();
cout<<"count(1):"<<s.count()<<endl;
cout<<"size:"<<s.size()<<endl;
cout<<"*iterator find(3):"<<*s.find()<<endl;
s.insert();
cout<<"count(2):"<<s.count()<<endl;
s.erase();
cout<<"count(2):"<<s.count()<<endl;
s.clear();
int a[]={,,,};
s.insert(a,a+);
set<int>::iterator iter;
cout<<"contain:";
for(iter=s.begin();iter!=s.end();iter++)
cout<<*iter<<" ";cout<<endl;
cout<<"key>3:"<<*s.upper_bound()<<endl;
cout<<"key<3:"<<*s.lower_bound()<<endl;
ms.insert((node){});
ms.insert((node){});
ms.insert((node){});
ms.insert((node){});
set<node>::iterator it;
cout<<"ms contain:";
for(it=ms.begin();it!=ms.end();it++)
cout<<it->x<<" ";cout<<endl; }
$TIPS:$可以直接通过$set.insert(a,a+4)$插入多个元素,$find,upperbound,lowerbound$返回的是迭代器,$erase$有三种用法:$set.erase(iter),set.erase(begin,end),set.erase(keyval)$,分别为删除指针指向的值,两个指针间的值,键值。
bitset
$bitset$是一个$01$串,每一位占一个$bit$,可以进行单点$0/1$修改,左移右移以及按位运算操作。一个非常好用的用法是统计某个数是否出现过,类似一个桶。同时两个$bitset$取或可以在优秀的复杂度下获得两个集合是否有重复元素的信息。它既是一个用于位运算的数组也是整形的一个压缩。
1.$bitset$里的小标从左往右递减,即最右边下标为0。
如下表:
|
值 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
1 |
| 下标 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
#include<bits/stdc++.h>
using namespace std;
bitset<>s(string(""));//字符串从右往左赋值 int main()
{
cout<<s<<endl;//输出为0000010101
unsigned int k=s.to_ulong();//自动转化为数字
cout<<k<<endl;
string str=s.to_string();
cout<<str<<endl;//自动转化为01字符串
s.set();//全部赋为1
cout<<s<<endl;
s.reset();//清零
cout<<s<<endl;
s.set();//把下标为3的位置赋为1
s.set(,);//同上
s.set(,);//赋为0
cout<<s<<endl;
cout<<s.test()<<endl;//检测3的值
cout<<s.test()<<endl;//检测4的值
s.reset();
s[]=;//赋值方法1
cout<<s<<endl;
s=;//赋值方法2
cout<<s<<endl;
cout<<s.any()<<endl;//是否有1
cout<<s.none()<<endl;//是否没有1
s.reset();
cout<<s.any()<<endl;
cout<<s.count()<<endl;//有几个1
s=;
cout<<s.count()<<endl;
s.flip();//全部取反
cout<<s<<endl;
s.flip();
cout<<s<<endl;//下标为0取反
}
C++STL整理的更多相关文章
- STL整理
sort 升序排列: iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素. iterator up ...
- STL整理之set
转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识: C++.C语言入门 Set是什么 Set是C++STL中提供的容器,set是数学上的集合——具有唯一性,即每个元素 ...
- C++ STL 整理
一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library ...
- 数据结构知识总结(STL整理)
重要知识点 1.基础知识 #include<bits/stdc++.h> //万能头文件 #include< algorithm > //包含sort函数 运用sort实现多关 ...
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back() 传回最后一个数据,不检查这个数据是否存在 ...
- STL整理之map
转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识: C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...
- Problem G: STL——整理唱片(list的使用)
#include<iostream> #include<list> #include<iterator> #include<algorithm> usi ...
- C++常用STL
目录 C++ 常用STL整理 容器和配接器 list(链表) stack(栈) queue(队列) priority_queue(优先队列) set(集合) vector(向量) map&&a ...
- 洛谷日报 & 原来博客(转载)
震惊,新的功能:可以按Ctrl + F 进行关键字查询. \(update\) on 10.26:把这两个月的日报也加入进去了,并且修复了几个错误. 本文会把小编用过的博客和比较好的博客放在这里. 可 ...
随机推荐
- 【DP合集】棋盘 chess
给出一张 n × n 的棋盘,格子有黑有白.现在要在棋盘上放棋子,要求: • 黑格子上不能有棋子 • 每行每列至多只有一枚棋子 你的任务是求出有多少种合法的摆放方案.答案模 109+7109+7 . ...
- SEER区块浏览器开发指南
区块浏览器基本功能 区块链浏览器是浏览区块链信息的主要窗口,每一个区块所记载的内容都可以从区块链浏览器上进行查阅.用户可以使用区块链浏览器查询记录在区块中的交易信息,包括转账.预测.账户管理和社区治理 ...
- Bran的内核开发教程(bkerndev)-06 全局描述符表(GDT)
全局描述符表(GDT) 在386平台各种保护措施中最重要的就是全局描述符表(GDT).GDT为内存的某些部分定义了基本的访问权限.我们可以使用GDT中的一个索引来生成段冲突异常, 让内核终止执行异 ...
- 渗透测试-基于白名单执行payload--Forfiles
0x01 Forfiles简介: Forfiles为Windows默认安装的文件操作搜索工具之一,可根据日期,后缀名,修改日期为条件.常与批处理配合使用. 微软官方文档:https://docs.mi ...
- Java项目部署与远程调试两三事
[开启和进行远程调试]参考https://blog.csdn.net/WSYW126/article/details/748536801.tomcat:配置catalina.sh jpda参数,主要是 ...
- C++中哪些函数不能声明为virtual?
首先要明确,virtual是用于支持类多态的关键字,所以出现在类声明之外的地方都是错误的.由此可以断定下文的1. 普通函数(即非类成员函数)不能是virtual的,否则不能通过编译,virtual只能 ...
- ajax 轮询(适合web端二维码请求)
(前几天 一直弄二维码轮询登录 想了半天 总算弄出来了 分享给大家 ^-^) 轮询: 所谓轮询 肯定需要 setInterval 但是怎么加ajax请求 需要有点小问题而且轮询成功后需要停 ...
- QCustomplot使用分享(九) 绘制图表-多功能游标
目录 一.概述 二.效果图 三.源码讲解 1.源码结构 2.头文件 3.添加游标 4.监测移动 5.移动游标 6.其他函数 四.测试方式 1.测试工程 2.测试文件 3.测试代码 五.相关文章 六.总 ...
- vue系列---理解Vue中的computed,watch,methods的区别及源码实现(六)
_ 阅读目录 一. 理解Vue中的computed用法 二:computed 和 methods的区别? 三:Vue中的watch的用法 四:computed的基本原理及源码实现 回到顶部 一. 理解 ...
- SQL挑战一 : 查找最晚入职员工的所有信息
以上数据库表: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_nam ...