IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 0x71 C++STL -> 正文阅读

[C++知识库]0x71 C++STL


??本章将介绍 S T L STL STL 中的 v e c t o r , q u e u e , p r i o r i t y _ q u e u e , d e q u e , s e t , m u l t i s e t , m a p , b i t s e t vector,queue,priority\_queue,deque,set,multiset,map,bitset vectorqueuepriority_queuedequesetmultisetmapbitset 八个部分。
??同时还会介绍算法头文件中的部分函数。

#include <vector>(动态数组)

?? v e c t o r vector vector S T L STL STL 的动态数组,其内部实现基于倍增思想1,在程序运行时能根据需求改变数组的大小。
?? v e c t o r vector vector 支持随机访问,它的内存空间同数组般是连续的,所以索引可以在常数时间内完成。但是在中间进行插入和删除操作会造成内存块的复制,与链表不同这种操作无法在 O ( 1 ) O(1) O(1) 完成,为保证效率元素的删减一般在末尾进行,因此我们将不会在动态数组中使用在数组中间插入和删除的功能(虽然可以)。

声明

  • int型
代码释义
vector<int> a;相当于一个长度动态变化的 i n t int int 数组
vector<int> a(b);用b定义a
vector<int> a(10);初始 10 10 10 0 0 0 元素
vector<int> a(10,6);初始 10 10 10 6 6 6 元素
  • string型
代码释义
vector<string> a(10,“null”);初始 10 10 10 n u l l null null 元素
vector<string> vec(10,“hello”);初始 10 10 10 h e l l o hello hello 元素
vector<string> b(a.begin(),a.end());b是a的复制
  • 结构型

a用来储存坐标

struct point{int x,y;}; 
vector<point> a;

常用操作

push_back/pop_back

??a.push_back(x); 把元素 x 插入到vector 的尾部。
??a.pop_back(); 删除 vector 的最后一个元素。

size/empty

??a.size(); 返回 vector 的实际长度。
??a.empty(); 返回一个 bool 类型,表明 vector 是否为空。两者的时间复杂度均为 O ( 1 ) O(1) O(1)
??所有的 S T L STL STL 均支持这两种方法,含义也相同。后面将不会重复提到。

clear

??a.clear(); 将 vector清空。

begin/end

??a.begin(); 返回vector 中的第一个元素的迭代器2。例如 a 是一个非空的 vector,则 *a.begin() 与 a[0] 的作用相同。
??a.end(); 返回 vector 的尾部,即第 n 个元素再往后的“边界”,*a.end()与 a[n] 都是越界访问。其中 n=a.size()。
??下面两份代码都遍历了 vector<int> a; 并输出其所有元素。

for(int i=0;i<a.size();i++){
	cout<<a[i]<<" "; 
}

for(vector<int>::iterator it=a.begin();it!=a.end();it++){
	cout<<*it<<" ";
}

front/back

??a.front() 返回 vector 的第一个元素,等价于 *a.begin() 和 a[0]。
??a.back() 返回 vector 的最后一个元素,等价于 *-- a.end() 和 a[a.size()-1]。

reverse

??reverse(a.begin(), a.end()) 将 vector 翻转。
??该函数包含在 算法头文件中,其时间复杂度为 O ( n ) O(n) O(n)

sort

??sort(a.begin(), a.end()); 使用sort函数排序,从小到大排

#include <bitset>

?? b i t s e t bitset bitset 可以看作一个多位二进制数,每八位占用一个字节,相当于采用了压缩状态的二进制数组,并支持基本的位运算。在估算程序运行的时间的时,我们一般以 32 32 32 位整数的运算次数为基准,因此 n n n 位的 b i t s e t bitset bitset 执行一次位运算的复杂度可视为 n 32 \frac{n}{32} 32n?

声明

bitset<10000> s;
??表示一个 10000 10000 10000 位的二进制数,<> 中填写位数。下面把数位记为 n n n

常用操作

代码注释
同二进制逻辑运算位运算操作符
s[k]和数组相同用法
s.count()返回有多少位 1 1 1
s.any()若 s 所有位为 0 返回 false,若至少有一位为 1 则返回 true
s.none()与s.any() 相反
s.set() s s s 的所有位变成 1 1 1
s.set(k,v)同等于 s [ k ] = v s[k]=v s[k]=v
s.reset() s s s 的所有位变为 0 0 0
s.reset(k)同等于 s [ k ] = 0 s[k]=0 s[k]=0
s.flip() s s s 的所有位取反
s.flip(k) s s s 的第 k k k 位取反,同等于 ? s [ k ] ~s[k] ?s[k]

  1. 倍增思想:
    ??设 n , m n,m n,m v e c t o r vector vector 的实际长度和最大长度。当加入一个元素前有 n = m n=m n=m 时,则在内存中申请一块大小为 2 m 2m 2m 的连续空间,并把内容转移到新的地址上(释放旧空间),然后插入元素。当删除一个元素后,若 n ≤ m 4 n\leq\frac{m}{4} n4m?,则释放一半的空间。
    ??总之,倍增思想是保持实际长度不会超过最大长度的一半。 ??

  2. 迭代器:
    ??迭代器就像 S T L STL STL 的“指针”,可以用 “*” 操作符解除引用。
    ??一个保存 i n t int int v e c t o r vector vector 的迭代器的声明方法为:vector<int>::iterator it;
    ??vector 迭代器是“随机访问器”,可以把 vector 的迭代器与一个整数相加减,其行为和指针的移动类似。可以把两个 vector 的迭代器相减,其结果也和指针相减类似,得到两个迭代器对应下标的距离。 ??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:37:43  更:2021-09-05 10:39:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:29:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码