STL
文章平均质量分 67
1.01
这个作者很懒,什么都没留下…
展开
-
C++相关容器篇章
内容链接vector点击链接stack和queue的函数用法点击链接原创 2023-07-30 16:38:28 · 260 阅读 · 0 评论 -
emplace_back() 和 push_back 的区别
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。引入了右值引用,转移构造函数(请看这里)后,push_back()右值时就会调用构造函数和转移构造函数。在这上面有进一步优化的空间就是使用emplace_backemplace_back函数原型:template <clas转载 2021-07-31 09:27:13 · 102 阅读 · 0 评论 -
排列next_permutation函数
STL源码:在STL中,排列函数next_permutation外,还有一个函数prev_permutation。前者是求出下一个排列组合,而后者是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b原创 2021-03-29 21:39:30 · 173 阅读 · 0 评论 -
STL容器--------set系
set:set关联式容器(和map一样,只不过set的键和值是一样的)。set作为一个容器也是用来存储同一数据类型的数据类型,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(默认情况下是从小到大),当然也可以自定义排序。注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二原创 2021-03-14 11:07:24 · 146 阅读 · 0 评论 -
C++ queue以及satck的用法
在C++中,使用头文件#include < queue >即可使用队列类。常用函数:pushpopsizeemptyfrontback(queue底层就是用deque,所以queue就是在调用deque的接口而已,只不过加了一层封装进行部分函数的限制)queue没有迭代器!!!deque的用法!!!C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。c++ st原创 2021-03-13 22:59:16 · 196 阅读 · 0 评论 -
C++ deque的用法
deque的API函数构造函数和析构函数:非变动性操作:变动性操作:注意:deque不提供容量操作:capacity()和reverse()。元素的插入和删除可能会导致内存重新分配。所以任何插入或删除操作都会使所有指向deque元素的pointers、reference、iterators失效。唯一例外的是在首尾插入元素之后,pointers和reference可能仍然有效。常用的deque的APIdeque构造函数deque < T > deqT;//默认构造形原创 2021-03-13 14:40:51 · 659 阅读 · 1 评论 -
C++ list的用法
在使用std::list<>链表时,难免会对数据进行添加删除操作。而遍历链表则有两种方式:通过索引访问,象数组一样处理;通过std::list<>::iterator链表遍历器进行访问listSTL 中的list 就是一 双向链表,可高效地进行插入删除元素。list不支持随机访问。所以没有 at(pos)和operator[]。list 对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) 。list< int>::itera转载 2021-03-13 10:48:39 · 1570 阅读 · 0 评论 -
C++ vector的用法
C++ vector的用法(整理)vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include;一、vector 的初始化:可以有五种方式,举例说明如下:(1) vector a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。(2)vector a(10,1); //定义了10个整型元素的向量,且给出每转载 2021-03-13 10:27:07 · 103 阅读 · 0 评论 -
string字符串用法
参考文献一参考文献二原创 2020-08-12 21:51:09 · 363 阅读 · 0 评论 -
STL容器-------map系
unordered_mapunordered_map内部是一个unordered_map一般是由一个大vector,vector元素节点可挂接链表来解决冲突,来实现,也就是实现了哈希表,因此其元素的排列顺序是杂乱的,无序的(unordered_map 就是 boost 里面的 hash_map 实现)hash_map其插入过程是:得到key通过hash函数得到hash值得到桶号(一般都为hash值对桶数求模)存放key和value在桶内。其取值过程是:5. 得到key6. 通过ha原创 2020-08-08 18:57:02 · 149 阅读 · 0 评论 -
stl中map自定义比较函数
在stl中自定义map比较函数有两种方式,方式一在类中重载<操作符,方式二仿比较函数1、方式一:重载<操作符#include "stdafx.h"#include <map>#include <string>#include <iostream>using namespace std; class Key{public: Key(string name, int age) { this->name=name; this-&转载 2020-08-07 15:16:48 · 594 阅读 · 0 评论 -
STL容器-----优先队列priority_queue
前言:什么是优先队列呢?在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问。即优先队列具有最高级先出的行为特征。它可以说是队列和排序的完美结合体,不仅可以存储数据,还可以将这些数据按照我们设定的规则进行排序。其内部实现是基于堆(树)实现的,那么找出最值的时间复杂度是O(logn).基本用法头文件:#include < queue > .优先队列具有队列的所有特性,包括基本操作,只不过在这个基础上增加了最值快速查找//基本操作1. top 访问队头元素2原创 2020-08-05 20:14:39 · 161 阅读 · 0 评论 -
STL容器-----array数组
前言:C++11中引入了array容器,array是序列容器的一种。array很类似于一般的数组,例如,array在栈上分配连续的内存来储存元素,并且array的大小是不可以改变的,这也就是说,可以修改array中元素的值,但不能向array中插入和删除元素其次:array是原生数组的封装,它存放于栈上且大小固定,性能也与之相同。在原生数组的基础上,它添加了范围检查,以及其它的STL的相应特性,比如复制、交换、迭代器、查询大小。初始化Array数组没有构造函数,也没有私有或保护成员,这就意味着它不会原创 2020-08-05 19:49:59 · 326 阅读 · 0 评论 -
STL------迭代器
本篇文章转载,请点击原文 1、自C++11起可以用range-based for循环来所有元素,但有时并不需要处理所有元素,此时可以使用迭代器。std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};for (auto n : vec){ std::cout << n << endl;}2、迭代器中用来表现容器中的某个位置operat转载 2020-06-30 20:56:46 · 178 阅读 · 0 评论 -
STL-----变动类算法
前言:变动类算法就是容器内元素发生改变,这类算法只要了解形参以及作用即可,分为:for_each,copy,copy_backward,transform,merge,swap_ranges ,fill,fill_n,generate,replace类算法等等。for_eachtemplate <class InputIterator, class Function> Function for_each (InputIterator first, InputIterator last原创 2020-05-14 11:44:59 · 138 阅读 · 0 评论 -
STL-----容器进行数值计算类算法
前言:此类算法都是在容器内进行数值计算的算法,常用在顺序容器上,向vector容器,数组等等。像我们平时如果要求容器内元素的总和,或者是两两之差,之和,之积等等,那肯定是自己写个for循环,但是STL库有这么方便的算法,那我们肯定用方便的玩意啦。分为两类,第一类是用于单个容器算法,比如:accumulate,adjacent_difference,partial_sum:第二类是用于两个容器的...原创 2020-05-07 23:57:40 · 344 阅读 · 0 评论 -
STL----- 移除类算法----remove以及unique
前言:所谓移除类算法就是把容器内符合某个条件的元素挪到后面去,给我们一营造一种删除的感觉,实际上并未删除,要想删除的话就配合erase这个算法。这里的话就几个算法而已,remove,remove_if以及unique。removetemplate <class ForwardIterator, class T> ForwardIterator remove (ForwardI...原创 2020-04-30 23:26:27 · 271 阅读 · 0 评论 -
STL-----变序类算法----next_permutation
前言:这个的话主要是解决排列组合的问题,也就是全排列的问题,比如1 2 3 进行全排列,如果我们自己写的话,肯定是dfs来写,但是我们可以用现成的算法next_permutationnext_permutationnext_permutation()会取得[first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;否则返回true。所以我们必须保证容器里的...原创 2020-04-29 23:25:46 · 145 阅读 · 0 评论 -
STL-----变序类算法
前言:所谓变序类算法,就是在一个容器里面,把原有的顺序改变,在这里主要是介绍几个算法,reverse翻转,rotate旋转次序以及random_shuffle随机化打乱顺序。reversetemplate<class BidirectionalIterator> void reverse( BidirectionalIterator _First, ...原创 2020-04-28 23:49:53 · 145 阅读 · 0 评论 -
STL------二分查找
前言:二分查找算法的前提是必须是有序的,这样才可以用此算法。像一些题目中经常要我们去寻找一个数,我们就可以用此算法,时间复杂度为logN。二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。二分查找模板首先我们先自己写这个算法,我习惯上把这类算法分为两个模板...原创 2020-04-26 23:50:51 · 328 阅读 · 0 评论 -
STL----已序类排序---merge方法
前言:merge类算法的前提依然是区间是有序的,主要是用来合并两个容器的元素或者是单个容器两段区间的元素,一说到这里,我们就会想起归并排序,对,我们也可以用这个算法来简化我们的代码量,具体看后面的例子。merge//default (1) template <class InputIterator1, class InputIterator2, class OutputIterato...原创 2020-04-24 22:23:25 · 380 阅读 · 0 评论 -
STL----已序类排序---set_类方法
前言:这set_类前提条件是区间已经有序,这样才能用此算法,简单来说,此类算法对应的就是我们高中常说的交集,并集,补集,差集等等。set_union —> 并集//default (1) template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterat...原创 2020-04-23 22:33:12 · 172 阅读 · 0 评论 -
STL-----排序类------sort与partition
前言:sort排序这个算法相信我们并不会陌生,这里就是总结其用法sortsort算法就是对给定区间所有元素进行排序,这个算法源码还是有点东西的,我也只是简单了解,还没深入。相信我们都知道那个快排算法,其实那个快排算法是有缺陷的,在某些极端情况下,时间复杂度可能为n^2,这时就要用上快排优化,我看到有位博主写得不错,点此链接,hh我猜测,sort跟这个快排优化应该是差不多的思路。//defa...原创 2020-04-22 23:19:15 · 312 阅读 · 0 评论 -
STL----排序类-----解决第k大问题
前言:相信我们会遇到过在一堆无序的数字中,问你第K大的数字是哪一个或者第K小的数字。当然,最简单的做法就是排序,然后直接输出第K大的数字,这样的话时间复杂度约为n^(3/2);例子:给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在1~109范围内),表示整数数列。输...原创 2020-04-21 23:59:30 · 465 阅读 · 0 评论 -
STL篇 ---排序算法---------heap函数
前言:我们先来学习一下不用STL算法里的Heap函数,自己如何去实现一个堆?要明白,堆其实就是二叉树排序,跟树是有关系的。知识点:1、堆是一颗完全二叉树;2、堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值。3、堆中每个结点的子树都是堆树。如下图(是个小根堆)大根堆构造代码:第一步:先把堆构造出来`//第一种方法就是边读入边构造//建立小根堆v...原创 2020-04-18 23:57:29 · 216 阅读 · 0 评论