![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 64
fff_421
笔记存档分享
展开
-
C++11新特性 Chapter1
...原创 2022-11-09 22:15:50 · 506 阅读 · 0 评论 -
自定义排序函数:priority_queue/set/struct
经常用到,但每次用到都不是很熟练,总结一下! 参考 #include<queue> template <typename T, typename Container=std::vector<T>, typename Compare=std::less<T>> class priority_queue 一共三个参数: T:存储元素类型 Container:存储容器,默认是vector< T> Compare:比较函数,默认是less< T&g原创 2021-08-18 18:58:59 · 252 阅读 · 0 评论 -
C++ STL:stack & queue
1 stack 首先我们说一下adapter适配器,就是改改其他容器,变成另一个东西 我们知道deque是一个两端开口的容器,而stack遵循先进后出,就类似于把deque的底儿封住,只能从口进,从口出。因此我们只需要关闭deque的一些函数就可以改成stack。不支持push_front()、pop_front(),就只有push()、pop(). stack只有顶端元素才会被外界获取,因此它不支持访问,没有迭代器。好耶! list也是双端开口的容器,也可以作为stack的底层容器。 2 queue 欸?原创 2021-05-02 20:39:49 · 79 阅读 · 0 评论 -
C++ STL:deque
1 deque概述 双端队列 vector是单向开口的连续线性空间, list是不连续空间, deque是双向开口的连续空间:双向开口就是头尾都可以插入删除元素 vector虽然是可以扩容,但是其扩容是先分配再复制后释放,但是deque允许在常数时间内在头和尾插入删除元素,deque没有容量的概念,无capacity有size, 是由分段连续空间构成的,那么deque的重点就是,如何在操作中保持分段连续空间的连接 vector的迭代器是支持随机访问的普通指针,虽然deque也支持随机访问,但不是普通指针 尽原创 2021-05-01 22:28:17 · 171 阅读 · 0 评论 -
C++:返回值是否为引用的区别
1 返回值不是引用 #include<iostream> using namespace std; class A { public: A() { cout << "default construct" << endl; data = nullptr; } A(int x) { cout << "construct" << endl; data = new int(x);原创 2021-04-24 11:43:27 · 125 阅读 · 0 评论 -
C++:右值引用、移动语义move、完美转发forward
好家伙,右值还能引用呢?在我印象中,右值就是一个数、常量,不是个变量咋引用啊? 1 右值引用 左值lvalue(locator value) 存储在内存中,分配过内存,在内存中有地址的,有名字的数据。 右值rvalue(read value)存储在寄存器中,不一定可寻址的 ,没有名字临时的数据。 为什么要引入右值引用呢? 说是因为:实际开发中,需要对右值进行修改,如move #include<bits/stdc++.h> using namespace std; int main() {原创 2021-04-24 11:12:47 · 119 阅读 · 0 评论 -
C++ STL : list
好! 不太想写CCF的题,那就再开一个吧 来 ! list,有了前面vector的基础,看list也轻松了很多,看来链表也是不是很难嘛 list优点就是插入删除方便,但是不能随机访问,因为不是连续的空间 1 基本数据结构 说到list,首先要看节点的数据结构 ```C++ struct _List_node//双向链表, 源码没太看懂,书上是 { pre; next; T data; // ``` typedef _List_node<_Tp> _Node; list中只有原创 2021-03-28 22:25:35 · 55 阅读 · 0 评论 -
C++复习
1 概述 C语言有的、常用的知识点就不再重复了,下面复习一下C++中一些基本且重要的东西 C++的三大特征: 封装、继承、多态 2 函数补充 2.1 函数参数传递 值传递:不改变实参,因为在调用时会在栈中分配形参空间,并使用实参初始化形参,然后形参就和实参没有关系了。代码我也就不写了,经典swap(a, b); 地址传递:改变实参,传递的是地址,通过解引用访问实参。地址本身还是值传递,但会通过地址去寻找实参并修改实参。 引用传递:改变实参,引用就是实参的一个别名,实质是对变量的间接寻址。形参就是原创 2021-03-27 19:10:38 · 217 阅读 · 4 评论 -
C++ STL : vector
1概述 c++提供了array, STL再提供vector、list、deque、stack、queue、priority_queue vector和array区别 array是静态的空间,一旦配置好了就不能变了,要是不够了,就得我们自己弄,再新建一个、复制、释放,好麻烦的 vector就是STL全包了,不用我们动手了 #include<vectoe> -> #include<stl_vector.h> 2 迭代器 空间连续 类普通指针 RAI 3 数据结构 start、fir原创 2021-03-25 00:13:52 · 133 阅读 · 0 评论 -
C++ STL : Traits
1 traits 概念引入 迭代器所致对象的类型 : value_type Promble : temeplate参数推导机制可以推导出函数参数,但是不能推导出函数返回值 使用声明内嵌的方法解决 template<class T> struct MyIter { typedef T value_type;//传进来T是value_type,用T*表示迭代器 T* ptr; MyIter(T* p = 0) : ptr(p){} T& operato原创 2021-03-24 09:23:20 · 173 阅读 · 1 评论 -
C++ STL: functor
0 前言 最近上C++选修,又看了看STL源码,就整理一下吧。 1 总体印象 accumulate() 相加->其他操作 sort() 重载operator< 将某种操作当成算法的参数 将该操作设计成一个函数,再将这个函数指着当成算法的一个参数(存在问题:函数指针不能满足STL抽象性要求) 将该操作设计成一个仿函数(class),再将该functor产生一个对象,将这个对象作为算法的一个参数 functor class need to overload operator() grea原创 2021-03-23 22:32:14 · 107 阅读 · 0 评论