- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我执行这段代码:
vector<complex<double> >
idft( vector<complex<double> > * v)
{
for_each(v->begin(), v->end(), conj);
然后编译器给我以下错误:
dft.cpp: In function 'std::vector<std::complex<double>, std::allocator<std::complex<double> > > idft(std::vector<std::complex<double>, std::allocator<std::complex<double> > >*)':
dft.cpp:38: error: no matching function for call to 'for_each(__gnu_cxx::__normal_iterator<std::complex<double>*, std::vector<std::complex<double>, std::allocator<std::complex<double> > > >, __gnu_cxx::__normal_iterator<std::complex<double>*, std::vector<std::complex<double>, std::allocator<std::complex<double> > > >, <unresolved overloaded function type>)'
如果我只对一个元素应用 conj() 那么它工作正常:
vector<complex<double> >
idft( vector<complex<double> > * v)
{
conj(v->at(0));
如何在不使用循环的情况下对整个 vector 应用 conj()?
最佳答案
for_each
在现代(C++11 及更高版本)C++ 中很少是个好主意。
void idft( std::vector<std::complex<double> >& v)
{
for (auto& x : v)
x = std::conj(x);
}
甚至:
template<class Range>
void idft( Range& v)
{
for (auto& x : v)
x = std::conj(x);
}
干净、通用、正确且易于阅读。
关于c++ - 在 C++ 复 vector 的每个元素上调用 conj() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479634/
这个问题已经有答案了: What's the difference between a method and a function? (42 个回答) 已关闭 7 年前。 我知道conj(x)和x.c
我正在尝试自学 clojure。这应该只是一个简单的函数,它接受一个值并将其前面的每个值相加并返回这些值的总和。 问题是,在 loop 函数中,numbers 没有像我期望的那样用 conj 修改 -
我正在尝试自学 clojure。这应该只是一个简单的函数,它接受一个值并将其前面的每个值相加并返回这些值的总和。 问题是,在 loop 函数中,numbers 没有像我期望的那样用 conj 修改 -
我正在尝试一些 Clojure,但现在对“conj”的行为感到困惑。请参阅以下示例: user=> (conj [1 2 3] 4) [1 2 3 4] 以上是预期的。但是现在,如果我执行以下操作:
(conj (drop-last "abcde") (last "abcde")) 返回(\e \a \b \c \d) 我很困惑。在conj的文档中,我注意到 The 'addition' may
我已经解决了 4clojure.com 上的 45 个问题,并且在尝试使用递归和累加器解决一些问题的方式中,我注意到一个反复出现的问题。 我会尽我所能解释我正在做的事情,以最终得到模糊的解决方案,希望
TL; DR 假设我有一个带有模板参数T的函数,该函数以std::vector&作为输入(请参见下文),如果T是复杂类型,我想对这个 vector 进行共轭。我怎样才能做到这一点 ? 我尝试了什么在h
我是 clojure 的新手,最初我正在经历 Clojure.org和 cheatbook . 我想知道 conj 不同行为的确切原因是什么在列表和向量上。 (conj [1 2 3] 4) [1 2
((fn foo [x] (when (> x 0) (conj (foo (dec x)) x))) 5) 对于这段代码,结果是 [5 4 3 2 1]为什么不是 [1,2,3,4,5]?我看到我们
core.typed 中的以下代码片段 (defn conj-num [coll x] (conj coll (byte x))) (t/cf (t/ann conj-num (t/IFn [(t
为什么 cons 在这种情况下与lazy-seq 一起工作,而 conj 却不行? 这有效: (defn compound-interest [p i] (cons p (lazy-seq (c
在conj中,原始集合是第一个参数,在cons中,它是第二个参数。 我是 clojure 新手,这看起来有点令人困惑。这两个函数有相似的行为,但是为什么参数顺序不同,是故意这样设计的吗? (conj
为什么这一直问 jack 是否想要一杯茶而不是其他父亲。 (defn tea-anyone "Ask 'fathers' if they would like some tea" [fathe
我知道 cons 返回一个 seq,conj 返回一个集合。我还知道 conj 将项目“添加”到集合的最佳末尾,而 cons 总是将项目“添加”到前面。这个例子说明了这两点: user=> (conj
假设我写了一个函数: (defn foo [to x] (conj to x)) 并希望通过声明 to 必须实现某些协议(protocol)来记录它(如在结构/类型中 to 必须支持调用 conj)。
我想要一个原子中的映射,可以将时间作为 Unix 时间戳进行跟踪。 所以,在我的主要功能中,我有: (defn -main [& args] (println "Server is starting"
如果我执行这段代码: vector > idft( vector > * v) { for_each(v->begin(), v->end(), conj); 然后编译器给我以下错误: dft
我不知道如何解决 GCC 中的这个链接问题。 我在 Windows 8、GCC+MingWG 4.8.1 下运行 CodeBlocks 13.12。 我创建了一个包含两个文件的项目: 主.c #inc
cons 目前的行为如下: (cons '(1 2) '(3)) ;=> ((1 2) 3) 我想实现: (magic-cons '(1 2) '(3)) ;=> (1 2 3) 我找不到这方面的资源
对我来说,std::conj(double d)仅返回d类型的double会更自然,因为结果肯定是真实的。 最佳答案 因为conj是对复数的运算。它匹配从double到std::complex的隐式转
我是一名优秀的程序员,十分优秀!