小编end*_*gin的帖子

带有模板成员变量的C++类

我正在尝试解决由对象(称为Diagram)组成的编程问题,该对象包含多个参数.每个参数(Parameter类)可以是以下几种类型之一:int,double,complex,string - 仅举几例.

所以我的第一直觉是将我的Diagram类定义为具有模板参数的向量,这看起来像这样.

class Diagram
{
private:
    std::vector<Parameter<T> > v;
};
Run Code Online (Sandbox Code Playgroud)

这不编译,我理解为什么.因此,根据此页面上的建议如何声明作为类中任何类型的对象的数据成员,我修改了我的代码,如下所示:

class ParameterBase
{
public:
    virtual void setValue() = 0;
    virtual ~ParameterBase() { }
};


template <typename T>
class Parameter : public ParameterBase
{
public:
    void setValue() // I want this to be 
                    // void setValue(const T & val)
    {
        // I want this to be 
        // value = val;
    }

private:
    T value;
};

class Diagram
{
public:
    std::vector<ParameterBase *> v;
    int type;
};
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用适当的模板化参数调用setValue函数.在ParameterBase抽象基类中不可能有模板化参数.任何帮助是极大的赞赏. …

c++ templates types

23
推荐指数
2
解决办法
6万
查看次数

如何在gdb中"观察"C++ std :: vector的大小?

我有一个std :: vector作为类的一部分,它包含一个自定义类型.它的内容似乎从程序的某个地方神秘地改变了.我无法弄清楚这是怎么回事.

有没有办法从gdb"观察"std :: vector的内容(或大小)?

谢谢.

c++ gdb stdvector

21
推荐指数
1
解决办法
6132
查看次数

了解Clojure期货

我试图理解Clojure期货,我已经看到了Clojure书中的常见例子,并且有一些例子将期货用于并行计算(这似乎是有道理的).

但是,我希望有人可以解释一个改编自O'Reilly编程Clojure书的简单例子的行为.

(def long-calculation (future (apply + (range 1e8))))
Run Code Online (Sandbox Code Playgroud)

当我尝试取消引用时,通过这样做

(time @long-calculation)
Run Code Online (Sandbox Code Playgroud)

它返回正确的结果(4999999950000000),但几乎立即(在0.045毫秒)我的机器上.

但是当我调用实际函数时,就像这样

(time (apply + (range 1e8)))
Run Code Online (Sandbox Code Playgroud)

我也得到了正确的结果,但所花费的时间要大得多(~5000毫秒).

当我取消引用未来时,我的理解是创建了一个新的线程,在该线程上评估表达式 - 在这种情况下,我预计它也需要大约5000毫秒.

为什么解除引用的未来如此迅速地返回正确的结果?

future clojure

7
推荐指数
1
解决办法
1420
查看次数

Clojure 1.3中的功能性能

我想知道是否有人可以帮助我在Clojure 1.3中使用此代码片段的性能.我正在尝试实现一个简单的函数,它需要两个向量并完成一系列产品.

因此,假设向量是X(大小为10,000个元素)和B(大小为3个元素),并且乘积之和存储在向量Y中,数学上看起来像这样:

Y0 = B0*X2 + B1*X1 + B2*X0

Y1 = B0*X3 + B1*X2 + B2*X1

Y2 = B0*X4 + B1*X3 + B2*X2

等等 ...

对于此示例,Y的大小最终将为9997,对应于(10,000 - 3).我已经设置了接受任何大小的X和B的函数.

这是代码:它基本上(count b)从X一次获取元素,反转它,映射*到B并对结果序列的内容求和以产生Y的元素.

(defn filt [b-vec x-vec]
  (loop [n 0 sig x-vec result []]
    (if (= n (- (count x-vec) (count b-vec)))
      result
      (recur (inc n) (rest sig) (conj result (->> sig
                                                  (take (count b-vec))
                                                  (reverse)
                                                  (map * b-vec)
                                                  (apply +)))))))
Run Code Online (Sandbox Code Playgroud)

在让X (vec (range 1 10001))和B成为时[1 …

performance clojure

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

Clojure代码的时序分析

你好Clojure专家,

我正在尝试在Clojure 1.3中进行一些计时测试,我想我会问一个基于现有代码的问题,该代码解决了从这篇博文中改编的微分方程.

代码如下:

;; the differential equation is                                                                                            
;; dy/dt = f(y,t) = t - y                                                                                                  

(defn f [t y] (- t y))

;; solve using Euler's method                                                                                              
(defn solveEuler [t0 y0 h iter]
  (if (> iter 0)
    (let [t1 (+ t0 h)
          y1 (+ y0 (* h (f t0 y0)))]
      (recur t1 y1 h (dec iter)))
    [t0 y0 h iter]))

(defn multipleSolveEuler []
  (let [steps '(1 10 100 1000 10000 100000)
        results (map #(second (solveEuler 0.0 …
Run Code Online (Sandbox Code Playgroud)

clojure

3
推荐指数
2
解决办法
451
查看次数

在自定义clojure向量中计算重复项

我正在尝试提出一个功能性解决方案来解释由交替集和数值组成的自定义数据结构中的重复项.

一个例子:

(def a [#{:a} 0.1 #{:b} 0.3 #{:a :b} 0.1 #{:a} 0.3 #{:b} 0.1 #{:a} 0.1])
Run Code Online (Sandbox Code Playgroud)

我想添加对应于重复集的值来导致

[#{:a} 0.5 #{:b} 0.4 #{:a :b} 0.1]
Run Code Online (Sandbox Code Playgroud)

我可以使用loop/recur但是想知道是否有一种在Clojure中使用高阶函数的方法.

谢谢.

vector clojure

2
推荐指数
1
解决办法
79
查看次数

标签 统计

clojure ×4

c++ ×2

future ×1

gdb ×1

performance ×1

stdvector ×1

templates ×1

types ×1

vector ×1