小编Sta*_*ked的帖子

如何告诉std :: set'刷新'它的排序?

如果集合中元素的值发生更改,则排序可能不再正确.如这个小程序所示:

#include <algorithm>
#include <iostream>
#include <set>
#include <string>

struct Comp
{
    bool operator()(const std::string * lhs, const std::string * rhs)
    {
        return *lhs < *rhs;
    }
};

int main()
{
    typedef std::set<std::string*, Comp> MySet;
    MySet mySet;

    std::string * a = new std::string("a");
    mySet.insert(a);

    std::string * c = new std::string("c");
    mySet.insert(c);

    std::string * b = new std::string("b");
    mySet.insert(b);

    for (MySet::iterator it = mySet.begin(); it != mySet.end(); ++it)
    {
        std::cout << *(*it) << std::endl;
    }

    // Ouput has correct order:
    // …
Run Code Online (Sandbox Code Playgroud)

c++ stl

4
推荐指数
2
解决办法
1011
查看次数

如何使用GDI +绘制填充颜色的(bezier)路径?

我正在使用Windows API和GDI +为Windows制作SVG渲染器.SVG允许在Path上设置'fill'和'stroke'样式属性.我在执行'fill'属性时遇到了一些困难.

以下路径代表螺旋:

    <svg:path style="fill:yellow;stroke:blue;stroke-width:2"
              d="M153 334
                C153 334 151 334 151 334
                C151 339 153 344 156 344
                C164 344 171 339 171 334
                C171 322 164 314 156 314
                C142 314 131 322 131 334
                C131 350 142 364 156 364
                C175 364 191 350 191 334
                C191 311 175 294 156 294
                C131 294 111 311 111 334
                C111 361 131 384 156 384
                C186 384 211 361 211 334
                C211 300 186 274 156 274" …
Run Code Online (Sandbox Code Playgroud)

c++ graphics svg gdi+

4
推荐指数
1
解决办法
2118
查看次数

懒惰序列还是重复数学幂函数?

作为练习,我实现了数学幂函数.一旦使用recur:

(defn power [a n]
  (let [multiply (fn [x factor i]
                   (if (zero? i)
                     x
                     (recur (* x factor) factor (dec i))))]
  (multiply a a (dec n))))

user=> (time (dotimes [_ 10000] (power 2 512)))
"Elapsed time: 1839.406746 msecs"
Run Code Online (Sandbox Code Playgroud)

有一次使用lazy-seq:

(defn power [a n]
  (letfn [(multiply [a factor]
            (lazy-seq
              (cons a (multiply (* a factor) factor))))]
  (nth (multiply a a) (dec n))))

user=> (time (dotimes [_ 10000] (power 2 512)))
"Elapsed time: 2162.297827 msecs"
Run Code Online (Sandbox Code Playgroud)

您认为哪种实施方式更优越?我真的不知道..(我会使用复发,因为它更容易理解.)

我读到lazy-seq很快,因为它使用内部缓存.但我在样本中看不到缓存的任何机会.我忽略了什么吗?

更新
我发布了样本的时间.似乎复发在这里稍快一些.

定期递归也不会太糟糕:

(defn …
Run Code Online (Sandbox Code Playgroud)

clojure

4
推荐指数
1
解决办法
816
查看次数

原子和参考文献

根据编程Clojure refs管理协调,同步更改共享状态和原子管理共享状态的不协调,同步更改.

如果我理解正确"协调"意味着多个更改被封装为一个原子操作.如果是这种情况,那么在我看来,协调只需要使用dosync调用.

例如:有什么区别:

(def i (atom 0))
(def j (atom 0))

(dosync
  (swap! i inc)
  (swap! j dec))
Run Code Online (Sandbox Code Playgroud)

和:

(def i (ref 0))
(def j (ref 0))

(dosync
  (alter i inc)
  (alter j dec))
Run Code Online (Sandbox Code Playgroud)

clojure

4
推荐指数
1
解决办法
1123
查看次数

"内联"功能的实用性

内联有两个方面:

  • inline如果编译器确定无法内联函数,则将忽略该关键字.
  • 有一个编译器优化(在Visual Studio上,我不知道GCC)告诉编译器尽可能内联所有函数.

由此我得出结论,我从不需要打扰内联.我只需打开发布版本的编译器优化.

或者是否有任何情况下首选手动内联?

c++

4
推荐指数
2
解决办法
421
查看次数

在Mac OS X上使用libltdl

我正在尝试将Linux C++项目移植到Mac OS X.在配置步骤中,执行以下命令:

$ glibtoolize --ltdl --force --copy
Run Code Online (Sandbox Code Playgroud)

哪个失败,输出如下:

glibtoolize: putting auxiliary files in `.'.
glibtoolize: copying file `./ltmain.sh'
glibtoolize: putting auxiliary files in `.'.
glibtoolize: copying file `libltdl/config/compile'
glibtoolize: copying file `libltdl/config/config.guess'
glibtoolize: copying file `libltdl/config/config.sub'
glibtoolize: copying file `libltdl/config/depcomp'
glibtoolize: copying file `libltdl/config/install-sh'
glibtoolize: copying file `libltdl/config/missing'
glibtoolize: copying file `libltdl/config/ltmain.sh'
glibtoolize: putting macros in `libltdl/m4'.
glibtoolize: copying file `libltdl/m4/argz.m4'
glibtoolize: copying file `libltdl/m4/libtool.m4'
glibtoolize: copying file `libltdl/m4/ltdl.m4'
glibtoolize: copying file `libltdl/m4/ltoptions.m4'
glibtoolize: copying file `libltdl/m4/ltsugar.m4'
glibtoolize: …
Run Code Online (Sandbox Code Playgroud)

c++ gnu

4
推荐指数
1
解决办法
4379
查看次数

如何自动输入密码?

我想在计算机列表(Jenkins节点)上安装软件库(SWIG).我正在使用以下脚本来自动执行此操作:

NODES="10.8.255.70 10.8.255.85 10.8.255.88 10.8.255.86 10.8.255.65 10.8.255.64 10.8.255.97 10.8.255.69"
for node in $NODES; do 
  scp InstallSWIG.sh root@$node:/root/InstallSWIG.sh
  ssh root@$node sh InstallSWIG.sh
done
Run Code Online (Sandbox Code Playgroud)

这种方式是自动化的,除了scp和ssh命令发生的密码请求.

有没有办法以编程方式输入密码?

安全不是问题.我正在寻找不涉及SSH密钥的解决方案.

ssh bash shell automation

4
推荐指数
2
解决办法
6002
查看次数

检测等效表达式

我目前正在开发一个Java应用程序,我需要实现一个用于构建BPF表达式的系统.我还需要实现检测等效BPF表达式的机制.

构建表达式并不太难.我可以使用Interpreter设计模式构建语法树,并实现toString获取BPF语法.

但是,检测两个表达式是否相同则要困难得多.一个简单的例子如下:

A: src port 1024 and dst port 1024
B: dst port 1024 and src port 1024
Run Code Online (Sandbox Code Playgroud)

为了检测A和B是等价的,我可能需要在比较它们之前将每个表达式转换为"标准化"形式.对于上面的例子,这很容易,但是,当使用嵌套和操作的组合时AND,它变得越来越难.ORNOT

有谁知道我应该如何最好地解决这个问题?

java algorithm design-patterns

4
推荐指数
1
解决办法
306
查看次数

push_back vs emplace_back with volatile

以下代码失败push_back并成功emplace_back:

#include <vector>
volatile int x = 0;
int main()
{        
    std::vector<int> vec;
    vec.emplace_back(x);
    vec.push_back(x); // error: no matching function for call to 'std::vector<int>::push_back(volatile int&)'
}
Run Code Online (Sandbox Code Playgroud)

我理解push_backfailes因为它需要一个引用并试图volatile从该引用隐式地抛弃限定符.

但是,emplace_back 需要引用(rvalue-references是引用).为什么区别对待?

c++

4
推荐指数
1
解决办法
395
查看次数

如何防止管道延迟输出?

当我在bash中运行以下命令时,它会等到程序完成后再刷新所有输出。如果我卸下管道,则它将立即打印每行。

{ for i in `seq 3` ; do echo $i ; sleep 1 ; done ; } \
    | perl -p -e 's,(.*ERROR.*),\e[01;31m\1\e[00m,g' \
    | perl -p -e 's,(.*WARNING.*),\e[01;33m\1\e[00m,g' \
    | perl -p -e 's,(.*TCPEchoTest.*),\e[01;30m\1\e[00m,g' \
    | perl -p -e 's,(.*enters.*),\e[00;33m\1\e[00m,g'
Run Code Online (Sandbox Code Playgroud)

如何使用管道,仍然要立即打印每行?

bash

4
推荐指数
1
解决办法
420
查看次数

标签 统计

c++ ×5

bash ×2

clojure ×2

algorithm ×1

automation ×1

design-patterns ×1

gdi+ ×1

gnu ×1

graphics ×1

java ×1

shell ×1

ssh ×1

stl ×1

svg ×1