随笔分类 - C/CPP学习
摘要:templateclass ThreadsafeList{ struct Node { std::mutex m; std::shared_ptr data; std::unique_ptr next; Node(): ...
阅读全文
摘要:template>class ThreadsafeLookupTable{private: class BucketType { private: typedef std::pair bucketValue; typedef std::list buck...
阅读全文
摘要:倒是很简单啊,我是先用 brew istall 安装的 boost,Qt creator 的版本是 3.4.2然后右键项目,选择添加库,接着在相应的文件夹里选择相应的后缀为 .a 的库文件,.pro 中就会自动配置。所以这就完了吗?当然不,我这里报错:can't map file crrno=22 ...
阅读全文
摘要:templateclass ThreadsafeQueue{private: struct Node { std::shared_ptr data; std::unique_ptr next; }; std::unique_...
阅读全文
摘要:上一篇文章里说到了一个极简易队列的实现,然而它对于并发存在一个问题,就是当多个或者说就是两个线程并发地访问队列,分别调用 push() 与 tryPop() 时,可能就会导致数据争用或者死锁。以下是一种思路,通过分离数据允许并发。其大致思路是预先分配一个不储存任何数据的结点占位,当 push() 进...
阅读全文
摘要:templateclass Queue{private: struct Node { T data; std::unique_ptr next = nullptr; Node(T _data): ...
阅读全文
摘要:学的还是不满意,对于智能指针还是有几个误区:1. 对于 unique_ptr sp1,觉得在 auto sp2 = std::move(sp1) 之后,其所管理的指针的资源会因为 sp1 的析构而导致其释放,后来发现并不是,move 操作只是管理权的移交,所以其存储的裸指针所分配的资源并不会被释放。...
阅读全文
摘要:templateclass ThreadsafeQueue{private: mutable std::mutex _mut; std::queue> _dataQueue; std::condition_variable _dataCo...
阅读全文
摘要:memory_order_release 意为只有前面的语句都执行完后,这条语句才会执行。memory_order_acquire 意为只有这条语句执行完之后,后面的语句才会执行。memory_order_consume 和 memory_order_acquire 差不多,只是memory_ord...
阅读全文
摘要:void printTriangle(int32_t layerNum){ if (layerNum < 1){ return; } for (int32_t currentNum = 1, spaceWide = layerNum - 1; ...
阅读全文
摘要:想了很久啊,看了标签是 DP,所以考虑之后自己琢磨出了个策略,结果还是不对啊,各种 test case 过不去。后来才发现这其实还可以用更为简单的方法——数学定理对没错,所以说世界上只有两种程序员:懂数学的和不懂数学的。// 四平方定理,又称 Lagrange's four-square theor...
阅读全文
摘要:原问题是,生产线中出现了一个残次品,导致在那之后的产品都是残次品,要求找出第一个残次品。问题中还给出了用于判断的 API isBadVersion(version) 我把问题简化了,理解为在一个数组中,前一段是正数,后一段是负数,求第一个负数的位置。奇怪的是我在 Xcode 上运行好几种情况都是成功...
阅读全文
摘要:比如一个 [3, 1, 5, 10] 的树,设其根结点为 root, 那么对于函数hasPathSum(root, 18) 的返回值就是 true。题目列出的知识点是深度优先搜索,可是我刚明白一点动态规划,所以我考虑的是,符合条件的树枝去掉叶子,剩下节点的和必然等于给定值减去叶子节点。bool ha...
阅读全文
摘要:本来是打算直接用 bitset 解决问题的,转成二进制再转成十进制,相加后再通过逆运算求得最终的字符串。然而却存在一个问题,就是溢出,当给出的二进制过于大的时候,相加就解决不了了,因此就要按照字符串来处理。以下是我的解决方案,虽说很丑,然而速度还行吧:string addBinary(string ...
阅读全文
摘要:因为每一行都是根据其上一行推出来的,所以说我只需要上一行的信息。vector getRow(int rowIndex) { if (rowIndex (); } vector result(rowIndex + 1); result[0] = 1; result[row...
阅读全文
摘要:我一只觉得是不是一个深度优先搜索啥的;然后一看是二叉树,立刻脑子就往递归去了,回溯?让叶子往根回溯?通过推迟求值来得到叶子再回溯,这就是我一开始的想法。然而却毫无进展,唉,于是我就用了一个很笨的方法,就是每遇到一个右孩子,就复制分叉前的树枝存入容器里,存入的位置由 index 作为其 id为了不会存...
阅读全文
摘要:自己想了两天都没思路啊啊啊啊啊我真是太笨了。看了他的 tag,说是用到了动态规划,于是特意看了算法导论里动态规划的部分。然而只是说了其思想,第一步构建合理的数据结构,第二部以递归的形式求解。可见水无常形,动态规划并不是单纯的公式就可以解决的。那么具体如何处理呢?第一是,什么时候会用到动态规划,就是这...
阅读全文
摘要:我已开始的策略其实是直接转字符串操作一下完了:int reverse(int x) { if (x == 0){ return 0; } while (x % 10 == 0){ x /= 10; } auto&& s = to_string...
阅读全文
摘要:就是字面意思,负数不算回文数。但可能是我的英语太差,所以看到 "Do this without extra space." 的时候,觉得是不能用其他的变量,因为要往栈上分配空间。所以觉得好难,以为要从回文数的数学性质入手,因此看了一些资料仍觉无从下手。直到看到了一些 Accepted 的解决方案……...
阅读全文
摘要:我用的方法是,同时保存每个 string 的begin 迭代器,让他们一起移动,然后统一比较,若是不同,或其中有的已经到了 end() ,那么就返回。否则所有的迭代器共同前进一步。string longestCommonPrefix(vector& strs) { if (strs.empty...
阅读全文
浙公网安备 33010602011771号