C++深入
文章平均质量分 87
qq_41111491
这个作者很懒,什么都没留下…
展开
-
回溯算法
理解回溯算法小时候,我们在构建迷宫时,往往会之构建一个出口,如何我们去把迷宫和回溯算法理解起来呢? 我们往往采取得方式是一条路走下去,遇到堵塞,我们回到未堵塞得点,然后退回上一次未选过的选项,我们就可以不断试错,走向出口。实际上这就是一种回溯的思路,真正的意思是,在成功之前,我们会一直在错误的路上。实例1 8皇后问题题目意思很简单,一个8*8矩阵,求出8位皇后放在矩阵中,条件是皇后之...翻译 2020-03-04 23:51:48 · 149 阅读 · 0 评论 -
constexpr:一个常态的世界
初识 constexpr#include <iostream>#include<array>using namespace std;int sqr(int n){ return n*n;}int main(){ int b; cin>>b; int a[b]; const int n=sqr(3);...翻译 2020-02-23 13:59:42 · 406 阅读 · 0 评论 -
散列表:如何去优化一个可用的散列表
散列表的查询效率并不能笼统地说成O(1),它给散列表函数,装载因子,散列冲突都有关系问题 如果散列函数将所有的数据都散列到同一个槽里,如果我们使用的开链方式,那么效率从O(1)退化到O(n)...翻译 2020-02-21 19:57:58 · 306 阅读 · 0 评论 -
编译期能做些什么?一个完整的计算世界
编译期计算C++模板,可以实现在编译期间模拟一个完整的图灵机模板元编程的基本概念:它仍然有一些实用的模板代码#include <iostream>using namespace std;template<int n>class factorial{public: static const int value=n*factorial<...翻译 2020-02-20 23:17:31 · 373 阅读 · 0 评论 -
数据结构与算法之美:散列表
如何实现一个单词拼写检查功能?散列思想散列表的英文叫“Hash Table”,也叫Hash表,Hash表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展。规律:散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列...翻译 2020-02-18 19:47:55 · 151 阅读 · 0 评论 -
自动类型推断和初始化
auto自动类型推断,就是编译器能够根据表达式的类型,自动决定变量的类型(C++14 还有函数的返回类型)auto并没有改变C++是静态类型语言这一事实,使用auto的变量类型仍然是编译时就确定的。例如for (auto it = v.begin(), end = v.end(); it != end; ++it) { // 循环体}模板类型推导法则受限...翻译 2020-02-17 16:11:05 · 177 阅读 · 0 评论 -
迭代器和好用的新for循环
什么是迭代器迭代器是一个通用的概念,并不是一个特定的类型,他实际上是一组对类型要求。他的最基本要球就是从一个端点出发,下一步,下一步地到达另一个端点。输入迭代器的要求:对象支持*操作,解引用取得容器内的某个对象 I对象支持++,指向下一个对象。 I对象可以和I或S对象进行相等比较,判断是否遍历到了特定位置C++和begin和end返回的类型I和S必须是相同的,C++17开始,...翻译 2020-02-17 13:35:17 · 177 阅读 · 0 评论 -
异常:用还是不用,这是个问题
异常机制异常处理并不意味着需要写显示的try和catch。异常安全的代码,可以没有任何try和catch异常安全的概念:异常安全是指当异常发生时,既不会发生资源泄漏,系统也不会处于不一致的状态。内存分配。如果new出错,按照C++,一般会得到异常bad_alloc,对象的构造也就失败,在catch捕捉到这个异常之前,所有栈上对象会全部被析构,资源全部被自动清理。办法 :适当组...翻译 2020-02-15 21:19:17 · 146 阅读 · 0 评论 -
左值右值->引用折叠->完美转发,究竟在解决什么问题?
移动语义的产生值分左右lvalue: 等号左边的表达式,既有名字又有地址的表达式 变量,函数,数据成员名字 左值引用的表达式 如++x ,x=1 ,cout<<' ' 字符串字面量 int & operator==(const int &lhs); ofstream & ope...翻译 2020-02-14 12:16:31 · 320 阅读 · 0 评论 -
RAII管理:智能指针的出现
现代C++30讲https://time.geekbang.org/column/article/169263 最早auto_ptr实现智能指针最基本的功能:对超出作用域的对象进行释放,从根本上消除资源泄漏的可能性。auto_ptr 是通过由 new 表达式获得的对象,并在 auto_ptr 自身被销毁时删除该对象的智能指针。它可用于为动态分配的对象提供异常安全、传递动态分配对...翻译 2020-02-10 14:20:16 · 108 阅读 · 0 评论