小编qua*_*dev的帖子

我应该到处使用std ::和boost ::前缀吗?

在我的C++代码中,我不使用声明using namespace std;using namespace boost;.这使我的代码更长,意味着更多的输入.我正在考虑开始使用"使用"声明,但我记得有些人反对这一点.建议的做法是什么?标准和助力是如此常见,那应该没有太大的伤害?

c++

7
推荐指数
4
解决办法
1774
查看次数

为什么在这个Haskell程序中没有使用尾调用优化?

以下程序打击堆栈:

__find_first_occurrence :: (Eq b) => b -> [b] -> Int -> Int
__find_first_occurrence e [] i = -1
__find_first_occurrence e (x:xs) i
    | e == x = i
    | otherwise = __find_first_occurrence e xs (i + 1)

find_first_occurrence :: (Eq a) => a -> [a] -> Int
find_first_occurrence elem list =   
    __find_first_occurrence elem list 0

main = do
    let n = 1000000
    let idx = find_first_occurrence n [1..n]
    putStrLn (show idx)
Run Code Online (Sandbox Code Playgroud)

失败了

堆栈空间溢出:当前大小为8388608字节.使用`+ RTS -Ksize -RTS'来增加它.

但是,据我所知,可能的递归调用__find_first_occurrence是最后评估的事情 …

recursion haskell tail-call-optimization

6
推荐指数
1
解决办法
922
查看次数

如何强制std :: sort使用移动构造函数和移动赋值?

我有一个类Data(现在)是不可复制的.std::sortstd::vector<Data>作品,因为我已经定义了移动构造函数和移动赋值的Data.我是这样做的,因为类里面有很多数据,复制内容会太慢.但是,由于无关原因,我正在考虑将类复制构造函数Data(const Data& other)和标准赋值运算符(from const Data&)添加到类中.我怎样才能确保当我对矢量进行排序时Data,std::sort仍会使用move-constructor和move-assignment?

c++ sorting move-semantics c++11

6
推荐指数
1
解决办法
1784
查看次数

如何通过引用相同的模板函数传递一行boost :: multi_array和std :: vector?

我对这段代码有问题:

#include <boost/multi_array.hpp>
#include <boost/array.hpp>
#include <vector>
#include <iostream>

template <typename Vec>
void foo(Vec& x, size_t N)
{
    for (size_t i = 0; i < N; ++i) {
        x[i] = i;
    }
}

int main()
{
    std::vector<double> v1(10);
    foo(v1, 5);
    std::cout << v1[4] << std::endl;


    boost::multi_array<double, 2> m1;
    boost::array<double, 2> shape;
    shape[0] = 10;
    shape[1] = 10;
    m1.resize(shape);
    foo(m1[0], 5);
    std::cout << m1[0][4] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

尝试用gcc编译它,我收到错误:

boost_multi_array.cpp: In function 'int main()':
boost_multi_array.cpp:26: error: invalid initialization of non-const …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost boost-multi-array

5
推荐指数
1
解决办法
1882
查看次数

STL容器的二进制兼容性

假设我用C++编写了一个DLL,并希望导出一个带有std :: vector参数的方法.我希望不同STL版本之间的任何二进制兼容性吗?

c++ stl binary-compatibility

5
推荐指数
2
解决办法
1340
查看次数

避免内联expqlitly实例化的std :: vector <T>代码?(Visual Studio C++ 2008)

我想减少我正在处理的大型项目中.obj文件的大小(我知道链接器会删除重复的定义,但我想加快构建过程).其大小的原因之一是每个类使用std::vector<double>std::vector<std::string>最终编译此类的代码并将其放在其.obj文件中.我试图显式实例化std::vector<double>和使用extern template声明,但它不起作用 - std::vector在Visual Studio C++中,STL具有内联的所有方法.如果没有修改STL代码(我不会这样做),有没有办法强制编译器不内联实例化方法并使用外部实例化版本std::vector<double>

c++ templates stl build visual-studio-2008

5
推荐指数
1
解决办法
375
查看次数

Haskell数组上的静态边界检查

有没有办法在Haskell数组上进行静态检查?我们来看看这段代码:

import Data.Array
let a = listArray (0, 10) [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02, 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00]
Run Code Online (Sandbox Code Playgroud)

(0, 10)应该是(0, 5),但编译器接受代码.该错误仅在运行时检测到,尽管它可以在编译时检测到.

arrays haskell

5
推荐指数
1
解决办法
394
查看次数

matplotlib可以生成EPS10输出吗?

EPS10支持矢量图形中的透明度和图层.matplotlib可以生成EPS10文件吗?

transparency matplotlib eps

5
推荐指数
1
解决办法
156
查看次数

哈斯克尔懒惰的评价

如果我调用以下Haskell代码

find_first_occurrence :: (Eq a) => a -> [a] -> Int
find_first_occurrence elem list = (snd . head) [x | x <- zip list [0..], fst x == elem]
Run Code Online (Sandbox Code Playgroud)

与论点

'X' "abcdXkjdkljklfjdlfksjdljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj"
Run Code Online (Sandbox Code Playgroud)

[('a',0), ('b',1), ]将打造多少压缩列表?

更新:

我试着跑

find_first_occurrence 10 [1..]
Run Code Online (Sandbox Code Playgroud)

并且9几乎立即返回,所以我猜它至少在简单的情况下使用延迟评估?当我跑步时,答案也会"立即"计算出来

let f n = 100 - n
find_first_occurrence 10 (map f [1..])
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation

4
推荐指数
3
解决办法
489
查看次数

这是合法的Haskell代码吗?

GHC编译顺利,但它在运行时失败了:

many_a x =
    let
        a = 2
    in
        let 
            a = 2*a
        in
            x*a
Run Code Online (Sandbox Code Playgroud)

直觉上,这不应该奏效.但是GHC接受了它.

haskell

3
推荐指数
1
解决办法
215
查看次数