c++
文章平均质量分 56
Zard 泉水
Get busy living, or get busy dying
展开
-
21 movable
movable 元素对vector 效率的影响vector 动态扩容 差距很大list 差距不大deque 是在前后扩充缓冲区,不需要拷贝元素r b_tree 差距不大hashtable : rehashing 扩容实现一个movable class左值,右值, 将亡值左值引用&,右值引用 &&Move 版本:指针,完成动作后指针指向nullptr析构函数 中要判断一下指针是否为空std::move()...原创 2021-07-22 00:22:02 · 152 阅读 · 0 评论 -
20 cout
cout 简介全局流对象gunc 2.9ostream & operator (ostream & os, const T& a){ ... return os; }原创 2021-07-20 22:46:20 · 122 阅读 · 0 评论 -
19 type traits
type traits 类型萃取gnuc 2.9 类型特性 默认情况下所有的东西都是重要的。在拷贝过程中要做构造和析构 如果知道这些类型不重要,可以写一个特化的版本出来。egtype 绑定为inttype 绑定为double更多的特化版本: complex 构造函数可以写,拷贝构造和拷贝赋值,析构函数不用写。这些性质都是由算法来问。算法根据这些性质进行一个高效的流程。缺点:使用时创建一个类需要加上这些特性。POD: plain old data c中的structGnuc 4原创 2021-07-20 22:44:22 · 114 阅读 · 0 评论 -
18 tuple
tuple, 用例 TR1 标准以后加入进来的,现在变成了标准库的一部分。指定任意类型。弹性很大。用法不同类型的tuple居然可以比较大小还可以使用 cout << v1tie 将tuple中的元素取出并赋值到传入tie的参数想要知道tuple的size tuple_size 编译器编译过程中去问,编译通过得到结果想要知道tuple中的元素 tuple_element源码解析variadic templates + 类的继承继承了部分的自己->减而治之h原创 2021-07-20 22:39:27 · 160 阅读 · 0 评论 -
17 一个hash function
hash function 问题:在使用hashtable为底层的容器时,必须要为其提供一个hashcode 数值类型本身的值就是hashcode 字符串的hashcode也有了#include <functional> class customer{ size_t customer_hash_func(const Customer &c) { return ... }}; // 函数对象struct cus原创 2021-07-19 22:21:38 · 113 阅读 · 0 评论 -
16 适配器
adapter 适配器迭代器适配器 与算法合作 迭代器的5 个typedef容器适配器 : stack, queue, map, set, multimap, multiset, unordered_set, unordered_multiset, unordered_map, unordered_multimap仿函数适配器 与算法合作设计模式:adapter适配器的实现a -> b继承方式 (不使用)组合方式 yes容器适配器容器适配器:stack, queue内原创 2021-07-19 22:18:46 · 136 阅读 · 0 评论 -
15 仿函数和函数对象
仿函数和函数对象 容易写一些小的组件融入到标准库中,作为辅助,functor只为了算法来服务仿函数 使用函数模版实现,使用时指定参数类型 identity. select1st, select2nd; 标准库提供的functor都有继承关系,我们自己写的都是单独的struct,没有继承表示没有融入STL的体系结构 在gnuc 4.9中名称发生了改变,用户代码要进行修改less<int>(); // 产生了一个临时的对象greater<int>(); /原创 2021-07-19 22:12:31 · 97 阅读 · 0 评论 -
14. 算法的示例
算法示例accumulateCallable item:functionfunction object operator()()lambada [](){}for_eachrange-based for statementfor(decl : coll){ statement; }replace头,尾,旧值, 新值带着if名称表示要给一个条件,参数是 头,尾,条件,新值 predicate 表示判断式 返回bool类型oldvalue 都以new原创 2021-07-19 01:12:04 · 155 阅读 · 0 评论 -
13.算法的性质
迭代器的分类 标准库中的算法都是函数模版算法的两个版本,第三个参数要传递一个准则,仿函数迭代器的分类5种迭代器的分类:有继承的关系输入迭代器输出迭代器双向迭代器随机访问迭代器输出迭代器打印容器迭代器的类型产生的是临时对象使用了模版函数 + 迭代器萃取 traits最后两个特殊的迭代器迭代器的typeidtypeid取决于编译器的实现typeid#include <typeinfo> cout << typeid(vec原创 2021-07-19 01:08:27 · 155 阅读 · 0 评论 -
12. 数据结构hashtable
容器hashtable散列表associated container.空间足够时,一对一映射实际上不会有这么大的空间。空间不足时,可能会发生两个或者多个不同的元素映射到一个槽bucket中。如何解决哈希冲突?一次函数转移到下一个位置二次函数转移到下一个位置次数越高,插入,查找的效率越低。工业界上使用的是开放地址法Separate Channing使用链表来处理哈希碰撞的情况当链表中的元素很多时,搜索的效率降低,这时需要将链表打散. rehashing增加原创 2021-07-19 01:02:56 · 154 阅读 · 0 评论 -
11.数据结构RBTree
RBTree 红黑树是一种适度平衡的二叉搜索树,排列规则有利于插入和查找,并且会自动保持平衡。没有任何分支过深。 是一种半线性结构,按照正常的遍历规则,得到的是排序状态(sorted) 不应该使用迭代器去修改元素的值,因为元素有着严谨的排列规则,编程层面上没有阻止。如此设计是正确的 基于红黑树的容器适配器set/multisetMap/multimap两种insertion操作,对应set/multiset, map/multimap容器RBTreekey和data原创 2021-07-16 23:31:44 · 138 阅读 · 1 评论 -
10.容器deque
deque - double-end-queue 内部分段连续,对外表现整体连续map是T*指针数组,map中维护指向buffer的指针,负责分段的控制尾端扩充,新分配一个buffer,串接到map末尾前端扩充,新分配一个buffer,串接到map前段、提供两个迭代器:start, finish迭代器:first 和 last 指出node对应buffer的头和尾cur 指出buffer中的位置,即当前元素位置node 如果走到了边界位置,先找到下一个node,转移到下一个buf原创 2021-07-16 23:26:43 · 96 阅读 · 0 评论 -
9.容器array
array为什么要封装成容器来使用:遵循容器的规则提供五种type_traits,让算法去询问相关的信息,便于算法操作Technical Report 1 版本: C++98 和 C++11之间的版本连续空间迭代器用指针实现即可,不用封装成pointer-like-classgnuc 2.9 也是如此类型萃取:T* 模版的偏特化gnuc 4.9forward list 自学 - -不提供operator–(), 所以不可能-end();...原创 2021-07-16 23:19:53 · 74 阅读 · 0 评论 -
模版函数 + 递归 + 默认参数
模版函数 + 递归 + 默认参数 在写模版函数 mergesort时,遇到默认参数指定问题。源代码错误的版本void test01(){ using namespace std; int arr[8] = {1,5,2,4,3,7,8,6}; #if 1 v0::mergesort(arr, arr + 8, greater<int>()); // 这里传入的函数对象是greater<int> 类型 for(auto a : ar原创 2021-06-30 23:47:53 · 116 阅读 · 0 评论 -
vscode c++语法检查以及指定c++标准
vscode c++语法检查以及指定c++标准下载插件 C/C++ Clang Command Adapter 在extension中搜索并下载安装,使用时发现其语法检查不支持c++11 标准。需要在配置中指定。在插件的配置中指定c++标准在Cxxflags 中指定需要的c++标准即可。配置完成后可以看到没有再显示语法错误了。...原创 2021-06-29 13:06:25 · 8332 阅读 · 0 评论