zzxxisme 最近的时间轴更新
zzxxisme

zzxxisme

V2EX 第 483829 号会员,加入于 2020-04-15 16:03:14 +08:00
zzxxisme 最近回复了
感觉有几个思路…
1. 首先看自己喜欢哪个方面哪个方向的技术,然后看这个方向有什么可以分享的,这样顺带可以自己学习一波。
2. 自己工作做开的内容是属于哪个方面的,然后从这个方面找相关的技术分享,这样工作量比较轻松。
3. 从别人分享的内容看属于哪个方向的,然后找相关的东西分享。例如 Disruptor 是属于多线程消息传递无锁队列,然后属于这方面的有没有可能更好的队列,然后找到这个 https://github.com/rigtorp/MPMCQueue
49 天前
回复了 olist 创建的主题 程序员 今天看到一个新发现的有趣的排序算法。
1. 这个论文里面提到这个 新算法 的好处不是在于效率,而是在于它的简单性,以及它的 看上去不是那么正确 的特点,然后这个论文去证明它的正确性。这个算法的确最后把 A 数组进行了升序排序。
2. 你说的第二个算法不是传统认为的冒泡… 冒泡每次 swap 的是相邻的两个数,而你的第二个算法是为`A[i]`找`A[i .. n]`的最小值。
90 天前
回复了 icemanpro 创建的主题 C++ 如何将 list 的值传给函数的可变参数?
看了其他人的理解,我觉得问题是把一个 list 的所有元素传到一个函数的参数列表,而函数的参数列表是 C 的可变参数。我想的是,既然是传给函数作为参数,list 的长度(也就是参数的数目)应该假设不会很多,于是可以假设一个最大 list 长度。如果是利用 C++,可以写一个模板函数,通过递归的方法一下下把每个元素取出来并用 parameter pack 存着,把所有都拿到之后,然后传给带可变参数的函数。像 5 楼说的,用 parameter pack 要在编译期间确定长度,这个长度就是前面说的最大 list 长度。

然后试着写了一下:
90 天前
回复了 icemanpro 创建的主题 C++ 如何将 list 的值传给函数的可变参数?
这个问题问得不知道怎么回答,因为描述不清楚,可以有很多种理解,例如是把整个 list 当做一个参数传给函数,还是把 list 的每个元素拿出来传给函数的每个参数?你的 list 和函数的签名是怎样的?最好能给段代码来表明你要做的事情,还有你做过什么样的尝试,这些尝试有什么问题。
93 天前
回复了 Hconk 创建的主题 C++ 看到一段挺有意思的 C++代码
尝试说一下我的理解。
1. 首先 [](){} 这样就是创建了一个 不接受任何输入,什么都不做,没有任何输出的 lambda
2. 然后 [](){} () 就是调用了一下上面说的 lambda

剩下的就是在加 attributes

3. lambda 声明返回值类型的地方是可以加 attribute 的,例如加一个[[noreturn]]就是 []() [[noreturn]] {}。而 [[ ]] 就是…加 0 个 attribute 。
4. 大括号里面的执行体里面也可以加 attribute,而且可以一次加多个,例如同时加 likely, fallthrough 就是 [[ likely, fallthrough ]]。而 [[ , , , ]] 就是…什么 attribute 也没有加。
5. 找了一份 C++ standard draft 看了一下 lambda expression 的定义,捕捉列表和参数列表应该是不可以加 attribute 的。我找的是这份 draft: https://eel.is/c++draft/expr.prim.lambda#nt:lambda-specifiers,可以看到 lambda-introducer (也就是捕捉列表)和 parameter-declaration-clause (就是 lambda-declarator 里面)之间是没说可以放东西的。
117 天前
回复了 zzxxisme 创建的主题 C++ 迫于生计,分享一个自己的 C++ LINQ API 实现
@c0xt30a 是 lazy 的。针对你的例子,
1. 第一个遍历 container 的操作就是翻译成

for (auto& i : container) {
...
}

2. 第二个 take_first(3)的操作是翻译成

num = 3
...
if (num-- != 0) {
...
} else {
break
}
...

3. 第三个 max_reduce 的操作就是翻译成

max = std::nullopt
...
if (!max || *max < x) {
max = x
}

然后把所有逻辑嵌套起来之后,就是下面这样:

num = 3
max = std::nullopt
for (auto& i : container) {
if (num-- != 0) {
if (!max || *max < i) {
max = i
}
} else {
break
}
}

按照你的例子,我弄了一个新的 example ( https://github.com/zzxx-husky/coll/blob/master/examples/first_n_max.cpp )。虽然不是遍历一个 container,但是也是试图 生成 很多的整数。因为只需要从前 3 个里面找,所以最后其实只生成了 3 个整数。下面是在 WSL 上运行 3 次的结果。

[email protected]:~/repos/coll/release | master
$ time ./examples/FirstNMax
Int 1 is 463223032
Int 2 is 1934040530
Int 3 is 897990617
The max of the 3 ints is 1934040530

real 0m0.010s
user 0m0.000s
sys 0m0.016s

[email protected]:~/repos/coll/release | master
$ time ./examples/FirstNMax
Int 1 is 2009885599
Int 2 is 491657854
Int 3 is 58190656
The max of the 3 ints is 2009885599

real 0m0.010s
user 0m0.000s
sys 0m0.000s

[email protected]:~/repos/coll/release | master
$ time ./examples/FirstNMax
Int 1 is 1704636435
Int 2 is 1382089679
Int 3 is 1782466259
The max of the 3 ints is 1782466259

real 0m0.010s
user 0m0.000s
sys 0m0.000s
118 天前
回复了 zzxxisme 创建的主题 C++ 迫于生计,分享一个自己的 C++ LINQ API 实现
@3dwelcome 谢谢!其实我做的也不是编程语言层面的东西。我用的也是 C++提供的语法,做一些 api 层面的东西,期望 api 可以想例如 scala 那样的 collection api 的函数式 api 好用,同时性能达到最好。
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   906 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 21:18 · PVG 05:18 · LAX 13:18 · JFK 16:18
♥ Do have faith in what you're doing.