C++
文章平均质量分 82
Lerchain
做游戏的,却感觉没什么游戏玩
展开
-
《Effective C++》重点条款心得
文章目录条款3 尽可能使用const条款3 尽可能使用const 总结:如果一个变量的值你以后不希望它变了,或者认为它不会再变了,就要把它加上const,用const修饰可以让编译器来帮你监督它,如果它敢变,编译器就敢报错。 还有很多细节上要注意的地方: 1.指针常量与常量指针。这是一个很容易弄混的东西,记住它的原则就是看const是修饰在*的左边还是右边。如果是在左边const int* p 或者 int const * p,那这就是指针常量,要注意”指针常量”这四个字前两个字是修饰的意思,原创 2020-06-08 09:03:50 · 314 阅读 · 1 评论 -
二叉树的前序中序遍历精华解(C++实现)
明天更新原创 2019-10-14 23:59:26 · 117 阅读 · 0 评论 -
C++实现工厂模式,工厂方法模式,抽象工厂模式。
本来寻思半个小时就能实现的,结果整整弄了一晚上。自己写的蛮详细的,应该好懂。下述代码看着不得劲可以从这网址上看。https://github.com/Lerchain/DesignPattern/blob/master/Factory/Factory.cpp#include "pch.h"#include <iostream>#include <string>...原创 2019-08-19 23:32:21 · 294 阅读 · 2 评论 -
C++多线程内存模型,memory_order杂谈。
release-acquire是需要配对使用的为什么要配对使用?release相当于把当前线程下release之前所有的数据实时更新了以下,但要特别注意的是,是只有调用acquire的那个线程会看到这个更新。所以他俩当然要一起使用了,你光release,不acquire,其他线程获取的都是乱序的,release等于relaxed了,你光acquire不release,acquire的也是re...原创 2019-08-18 23:43:18 · 544 阅读 · 2 评论 -
内存中的栈与堆与静态存储区与代码区
一个程序,是存在硬盘上的。当你运行它时,需要将它拷贝入内存中才能运行。在内存中分别存放在栈区,堆区,静态存储区,代码区。首先着重说明,不存在常量区(它在静态存储区内)或是文字常量区(Java或许有?),或是自由存储区(存在但是是抽象的)。栈区存放局部变量,它处于内存中的高地址范围,每存入一个变量,就好似向栈中压入一个变量一样,即高地址向低地址生长。它的资源由编译器分配与释放,由于它在内存中是...原创 2019-08-01 14:10:24 · 783 阅读 · 0 评论 -
多线程请勿使用双重检验锁保护数据初始化
在前些年,双重检验锁据说被广泛的运用。其形式如下:#include <iostream>#include <mutex>using namespace std;class SomeObject{public: void Hello() { cout << "Hello" << endl; }};class BadAtempt...原创 2019-08-03 11:32:35 · 140 阅读 · 1 评论 -
C++Singleton设计模式思考
先说重点,我觉得网上很多文章的Singleton实现都有些老。我认为只需要这么写。class Singleton1{ Singleton1() { }public: static Singleton1& get_instance() { static Singleton1 instance; return instance; }};Singleton模式的...原创 2019-07-28 23:16:51 · 103 阅读 · 0 评论 -
最后一块石头的重量2时间复杂度巨高解法
刚做完137周的周赛。最后一道题如图做题的时候还显示是Hard难度,现在就变成Medium了。不过这题确实不算难。以下是我的垃圾DFS解法。最坏情况下数组长度超过7个就TLE了233333class Solution {public: int lastStoneWeightII(vector<int>& stones) { dfs(stones); retu...原创 2019-05-19 12:52:29 · 231 阅读 · 0 评论 -
Leetcode25题k个一组翻转链表C++解答
这题懵逼的做出来了,懵在最后如何返回链表首节点,凭着感觉写了个dummy,结果就AC了,过了之后想半天没想明白怎么就AC了?在VS上调试发现是pre的功劳。首次进if时pre仍代表dummy,把dummy更新了。真是无心插柳。/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2019-05-14 11:32:14 · 185 阅读 · 0 评论 -
Leetcode第10题正则表达式匹配DFS解法
今天很开心啊,先是在单词拆分2中用动态规划(单词规划1的解)加DFS把题解出来后信心大增,然后尝试做了下这第10题,时隔2个月终于给做出来了。用DP解时间复杂度更低但我现在水平还差些,但与2个月前琢磨1天写了100多行if else的自己比算很有进步了,很开心。贴个代码class Solution {public: bool isMatch(string s, string p) {...原创 2019-04-15 20:28:48 · 240 阅读 · 0 评论 -
C++substr方法返回的是新字符串
Returns a newly constructed string object with its value initialized to a copy of a substring of this object.The substring is the portion of the object that starts at character position pos and span...原创 2019-03-23 20:49:33 · 1343 阅读 · 0 评论 -
传迭代器参数小陷阱
前段时间做正则表达式匹配(leetcode10题)做了一天没做出来。今天看剑指offer看到了这道题用的递归,我就试着套用了一下,结果怎么都是0.VS上调试了半天发现就是在第37行出错的,改成了“\0”就通过了,让我有了不能将迭代器作为函数参数的错觉,还特意查了半天没查出来。后来发现人家其实都告诉啦所以说一定要读出错提示啊 人家还给举个例子说迭代器可能指向了不同的实例。让我不禁立刻想到我传的str...原创 2019-03-06 17:38:10 · 567 阅读 · 0 评论 -
C++to_string()方法不适用于char类型
想当然了,结果一直为0还不明所以找了半天错误。to_string()方法会返回char的ASCII码值。因为人家函数参数根本就没有char.只能int float之类的数值。所以后来改用了截取子字符串函数substr(start,length)。这里也有坑,注意substr()和substring()的区别。前者第二个参数是截取的长度,后者是截取的截至(start,end)且不包括end.以下...原创 2019-02-10 18:37:54 · 1165 阅读 · 0 评论 -
C++ 栈调用top()函数时栈不能为空
Leetcode上写二叉树求最大深度的代码创建的栈没有初始压入元素,以为空栈调用top函数会返回NULL。然后调试了好久发现top可能有古怪。百度了一下发现top返回的是超尾-1,所以The top function returns the topmost element of the stack. You should ensure that there are one or more...原创 2019-01-24 19:23:53 · 7766 阅读 · 1 评论