C++与其STL
C++ 和她的 STL 标准容器的常用方法
AkagiSenpai
哼 ~ 哼 啊啊啊啊啊啊啊啊啊
▃▆█▇▄▖
▟◤▖ ◥█▎
◢◤ ▐ ▐▉
▗◤ ▂ ▗▖ ▕█▎
◤ ▗▅▖◥▄ ▀◣ █▊
▐ ▕▎◥▖◣◤ ◢██
█◣ ◥▅█▀ ▐██◤
▐█▙▂ ◢██◤
◥██◣ ◢▄◤
▀██▅▇▀
展开
-
C++ unordered_set 真的快吗?小规模下用时约等于顺序查找
前言我们都知道哈希set,也就是STL中的unordered_set容器,他非常方便,能够在O(1)的时间内完成查询,有一次我在做作业的时候,却发现实际效果没那么好。问题大概是这样的,有一个图,每个节点都有一些不同的属性,要查找那些节点具有特定的属性,我使用哈希set来存储属性,结果和线性表差不多然后我猜想是规模太小的时候就用unordered_set的问题,其实就是这个问题,我知道的,只是不知道这个问题的边界在哪里 ,即多少规模下,顺序查找快。今天来测试一下unordered_set和顺序查找,不原创 2020-06-22 12:28:43 · 3772 阅读 · 0 评论 -
C++类模板 简单讲解与实现
目录模板机制类模板介绍类模板实现template关键字实例化一个例子多个类型的模板类模板机制模板机制使得程序员不需要关心参数的数据类型,只用专注于实现算法,将数据类型与算法抽象分离,是可以提升编码效率的好东西。上一篇【C++ 模板函数 讲解及实现】介绍了如何使用函数模板来简化编程,今天来介绍类模板类模板介绍类模板在实现一些数据结构的时候经常使用,因为数据结构告诉我们不需要关心实际存储的数据类型,而是专注于存储的方式。如果我们希望实现一个数组类,用来存储int元素,我们可以很快实现class m原创 2020-06-11 13:35:52 · 1165 阅读 · 0 评论 -
C++ 模板函数 讲解及实现
目录模板函数:机制介绍模板函数:实现代码模板函数:机制介绍在很多时候,我们需要对不同的数据类型做一些操作,但是这些操作是相同的,比如求取一个数组中的最大元素,我们只需:for(int i=0; i<arr.size(); i++) if(arr[i] > max_val) max_val = arr[i];可是面对不同的数据类型,我们需要实现不同的函数,比如下面我们需要实现两个函数来选择int或者double数组中的最大值,非常麻烦int array_max(vector<i原创 2020-06-04 17:14:40 · 1554 阅读 · 0 评论 -
C++自定义数据类型与标准数据类型的转换 讲解及实现
目录标准类型转换为自定义类型创建带标准数据类型形参的构造函数重载 = 运算符自定义数据类型转为标准数据类型类型转换为编程提供了方便的接口,c++的标准数据类型已经预设了一些转换,比如你可以使用 int a = 1.0 来将一个浮点型的数据转换为整数,可是对于那些我们自定义的数据类型,就没有那么方便了,所以需要我们自己实现标准类型转换为自定义类型将标准数据类型(比如int,float,double)转换为我们自定义的数据类型,我们希望用 a = b 这种语句来操作,有两种实现方式创造带标准数据类型形原创 2020-06-02 14:05:53 · 1218 阅读 · 1 评论 -
c++运算符重载简单讲解 cout输出自定义数据类型
目录表达式与运算符运算符及其重载本质(附代码)两种重载运算符函数的方式以类成员函数的形式重载以友元函数的形式重载单目运算符的重载前++,即 ++a 的重载及(附代码)后++,即 a++ 的重载(附代码)双目运算符的重载(附代码)cout输出自定义类型(附代码)表达式与运算符一个表达式由结果,左值,运算符,右值构成,当然有的表达式也可以没有结果,比如++(自增)运算我们可以轻易的使用以下语句来完成int类型变量的加法运算int a = 114, b = 514;int c = a + b;原创 2020-05-28 23:18:05 · 4518 阅读 · 0 评论 -
C++虚函数简单讲解
多态的基本概念举个栗子,我们有一个对象animal,他有一个speak方法,即发出叫声,因为所有动物都会发出叫声,所以在animal基类里面定义这样的一个方法是合理且方便的class animal{public: void speak(){cout<<"这是animal类"<<endl;} };在这之后我又定义了一个函数animal_speak,它接收任何animal对象的指针,然后调用animal对象的speak方法void animal_speak(animal原创 2020-05-21 18:47:50 · 299 阅读 · 0 评论 -
C++虚继承简单讲解
多继承及潜在问题对象的继承,指的是一个子类对象获得父类对象的所有属性和方法,并且可以在此基础上拓展新的属性和方法的一种行为(个人理解,请勿当真。。)那么继承可以一直进行,比如c继承自b,b又继承自a,那么c的父类是b,b的父类是a,c的爷类是a,这好理解但是值得注意的是,c++可以支持多继承这意味着一个类可以有多个爹(父类)爹类(父类)们,可能拥有共同的父类那么一个类可能会拥有多个爷类,这时候就会发生冲突,因为爷类是同一个(即如下图的a)这个时候就会发生问题,因为继承的特性是:子类先创原创 2020-05-21 13:51:54 · 386 阅读 · 0 评论 -
C++ ifstream ofstream文件流读写文件 读写多个文件介绍
做算法实验,代码查重,需要读取文件,c++读取文件过于蛋疼了,还是记录下把步骤:使用ifstream打开文件流重定向输入输出流到文件读取数据/写入数据输入输出流回到控制台#include <bits/stdc++.h>using namespace std;/** @function readfile : 将文件作为行字符串读取进lines * @param filepath : 文件路径 * @param lines : 接收文件行的字符串数组 *原创 2020-05-12 23:00:11 · 2731 阅读 · 0 评论 -
c++ stringstream简单实现string与int/double转换
一些高级语言比如py,他们的数据类型之间的转换,都拥有灵活而便利的特性,然而c++也提供了一些方便的辅助库,今天来学习stringstream,字符串流在变量类型转换中的应用,这使得编程的速度,大大的提高了流的概念说到流,最常用的就是iostream 即 input / output stream 输入输出流,回想我们是怎样使用流的?cout<<a; // 向输出流中添加数据a...原创 2020-04-30 13:38:15 · 2014 阅读 · 2 评论 -
C++ 自定义哈希函数使得自制数据类型也可使用STL的哈希set,map
如果想用哈希的时候,但是哈希的目标又不再STL标准的类型内,比如一个自定义的class,就不太方便使用STL默认的哈希函数,比较函数,那么就需要重写了什么是哈希哈希就是搞一大块内存,然后给他们编号,然后通过一定的手段,对每个要存储的对象,尽量通过哈希函数得到不同的值,根据这个值放到对应的内存中冲突假设使用的哈希函数是 %4 ,要存储的数据类型是int,存储 16 和 64 这两个数字的时候...原创 2020-03-21 16:53:50 · 3777 阅读 · 0 评论 -
C++ freopen 打开txt文件,读取,写入txt文件
需要stdio头freopen属于输入输出流的重定向,一般我们默认的输入流是在黑黑的控制台,但是我们也可以选择从一个txt文本中读取信息,这和我们键入控制台是一样的,相当于把txt的内容拷贝到控制台参数/*param filePath : 文件路径(string)param mode : 模式 r=读 w=写(string)param stream : 重定向到那个流 std...原创 2020-03-08 16:37:30 · 6687 阅读 · 0 评论 -
C++ STL merge/inplace_merge 归并函数简单使用
C++ STL merge/inplace_merge 归并函数简单使用c++自带的归并函数也是比较好用的,可以节省很多时间,归并也分为异地归并和原地归并,先来看一下异地归并异地归并异地归并需要一个额外的空间来存储归并后的结果,通常是通过传递该空间的起始迭代器(最底层迭代器)来实现的/*function : 将两个有序序列按照运算符归并为一个有序序列param beign1 ...原创 2020-02-21 17:52:42 · 1993 阅读 · 0 评论 -
LeetCode:349 两个数组交集 set简单运用
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。来源:力扣(LeetCode)链接:https://lee...原创 2020-02-16 15:13:00 · 121 阅读 · 0 评论 -
C++ STL set集合容器简单使用
C++ STL set集合容器简单使用简介set事一种关联式容器,刻画了具有某些相同特征的事物的集合,类似数学概念 ,与【STL的map】相似,但是不同的是,set的键是元素本身通过查询,可以快速确定一个元素是否位于某个集合之中常用方法set的创建与初始化可以单纯的像int a一样声明一个setset<int> se;也可以由两个迭代器确定的一段序列来初始化集合,即把...原创 2020-02-16 15:07:37 · 259 阅读 · 0 评论 -
C++ min/max_element 非常快的查最值函数用法
C++ min/max_element 非常快的查最值函数用法同样是O(n)复杂度,但是经过不严谨 测试,使用库函数的速度远超for循环的遍历找最值/*param begin : 序列起始地址(迭代器)param end : 序列结束地址(迭代器)return : 序列中最小元素地址(迭代器)*/min_element(begin, end);/*param be...原创 2020-02-15 18:09:41 · 2285 阅读 · 1 评论 -
LeetCode:350 两个数组的交集II map映射
LeetCode:350 两个数组的交集II map映射给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。...原创 2020-02-15 15:16:13 · 213 阅读 · 0 评论 -
C++ STL堆相关函数的简单使用
C++ STL堆相关函数的简单使用简单介绍下堆相关的函数的使用堆不是容器,而是组织容器元素的一种特别方式。只能确定堆的范围,即开始和结束迭代器指定的范围。这意味着可以用容器中的元素子序列创建堆,可以在已生成的堆中添加元素。以vector容器为例:为了简化代码,vector的读取和输出被打包为两个函数 ↓vector<int> get_input(){ int n;...原创 2020-02-07 17:26:41 · 1137 阅读 · 1 评论 -
C++ 重载大于/小于号,使自定义数据类型也可以使用STL
C++ 重载大于/小于号,使自定义数据类型也可以使用STL如果有一道题,明显地需要用到排序与比较,但是比较不只是简单的大于小于,比如:给定一些点,输出离原点最近的 k 个点这时候如果想使用便利的 STL的话(比如sort, priority_queue等排序相关的方法),原有的比较方式就行不通了,需要我们手动重载运算符以实现比较/*param 1/2: 两个待比较的结构体retu...原创 2020-02-07 16:00:14 · 4764 阅读 · 0 评论 -
C++二分查找库函数 lower_bound,upper_bound,binary_search 的简单使用
C++二分查找库函数 lower_bound,upper_bound,binary_search 的简单使用需要#include <algorithm>lower/upper_bound函数参数列表及其解释:/*param 1 : 要查找的序列首地址param 2 : 要查找的地址结束地址param 3 : 要查找的元素地址return : 使用二分查找,若存在,...原创 2020-02-06 20:38:14 · 1647 阅读 · 0 评论 -
C++ next_permutation 全排列 函数的简单使用
C++ next_permutation 全排列 函数的简单使用/*function : 将指定地址的元素做下一种全排列param 1 : 全排列的容器起始地址param 2 : 全排列的容器结束地址return : 是否还存在全排列的情况*/next_permutation(a, a+n);因为操作是做下一种全排列,比如123会变成132,这样会导致第一种情况无法输出,...原创 2020-02-01 15:20:22 · 208 阅读 · 2 评论 -
C++ STL 优先队列(priority_queue)容器的简单使用
C++ STL 优先队列(priority_queue)容器的简单使用如果需要用到堆的地方,可以使用C++ STL中的priority_queue实现,比较方便/*priority_queue <type, containor, function>param type : 每个元素的数据类型param containor : 底层用什么结构存储数据,默认是vector...原创 2020-01-20 17:54:41 · 460 阅读 · 0 评论 -
C++ STL map 的简单使用例
C++ STL map 的简单使用例有时候做OJ,尤其是图的题目,会有要求用字符串表示顶点的,他的输入的顶点信息也是字符串,可是对于邻接矩阵或者邻接表,我们希望把顶点信息转化成数字,这样方便使用数组进行处理一般我们是写一个函数顺序查找整个输入字符串数组,然后找到相同的下标,比较繁琐,而且复杂度是O(N2) ,如果用map,人家底层是红黑树,达到时间复杂度O(log(n))STL 的 map...原创 2020-01-27 18:11:17 · 306 阅读 · 0 评论 -
C++ STL vector 不想初始化长度怎么办
vector方便的地方就在于不用在意长度的限制,但是如果一开始为vector读取输入的时候,我们没有初始化vector大小的话,很容易出现下标越界的情况,然后程序不跑了。。。有时候未知输入的长度时,vector开小了怕越界,开大了怕浪费解决方法使用 vector 的 insert 方法,这样一来vector会自动地增加自己的长度了,防止越界// 在尾部直接插入元素 xv.insert(v...原创 2020-01-27 17:45:08 · 2027 阅读 · 0 评论