小编tem*_*def的帖子

你从这个破碎的随机洗牌中得到了什么分布?

着名的Fisher-Yates shuffle算法可用于随机置换长度为N的阵列A:

For k = 1 to N
    Pick a random integer j from k to N
    Swap A[k] and A[j]
Run Code Online (Sandbox Code Playgroud)

我一遍又一遍地告诉我的一个常见错误是:

For k = 1 to N
    Pick a random integer j from 1 to N
    Swap A[k] and A[j]
Run Code Online (Sandbox Code Playgroud)

也就是说,不是从k到N选择一个随机整数,而是从1到N中选择一个随机整数.

如果你犯了这个错误怎么办?我知道由此产生的排列不是均匀分布的,但我不知道对于最终的分布有什么保证.特别是,有没有人有关于元素最终位置的概率分布的表达式?

language-agnostic random algorithm math shuffle

72
推荐指数
5
解决办法
6029
查看次数

为什么在C和C++中对NULL指针的定义不同?

在C中,NULL定义为(void *)0在C++中它是0.为什么会这样?在CI中可以理解,如果NULL不是类型转换,(void *)则编译器可能/可能不会生成警告.除此之外,有什么理由吗?

c c++ null pointers

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

为什么像"volatile int*p"这样的点到易失性指针很有用?

volatile是告诉编译器不要优化引用,这样每次读/写都不会使用存储在寄存器中的值,而是进行实际的内存访问.我可以理解它对一些普通变量有用,但不明白如何volatile影响指针.

volatile int *p = some_addr;
int a = *p; // CPU always has to load the address, then does a memory access anyway, right?
Run Code Online (Sandbox Code Playgroud)

如果它被宣布为有什么区别int *p = some_addr

c pointers volatile

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

qsort vs std :: sort的表现?

根据Scott Meyers的说法,在他的Effective STL书中 - 第46项.他声称这std::sortstd::qsort内联的事实要快670%.我测试了自己,我看到qsort更快:(!有谁可以帮我解释这个奇怪的行为?

#include <iostream>
#include <vector>
#include <algorithm>

#include <cstdlib>
#include <ctime>
#include <cstdio>

const size_t LARGE_SIZE = 100000;

struct rnd {
    int operator()() {
        return rand() % LARGE_SIZE;
    }
};

int comp( const void* a, const void* b ) {
    return ( *( int* )a - *( int* )b );
}

int main() {
    int ary[LARGE_SIZE];
    int ary_copy[LARGE_SIZE];
    // generate random data
    std::generate( ary, ary + LARGE_SIZE, rnd() );
    std::copy( ary, ary …
Run Code Online (Sandbox Code Playgroud)

c++ sorting performance stl

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

为什么在尝试使用显式类型参数调用模板成员函数时出错?

我不明白,在我看来,调用f是完全明确的,但它无法编译expected primary-expression before ‘int’.如果我通过调用注释掉该行f,它编译得很好.

template<typename T>
struct A {
    template<typename S>
    void f() { }
};

template<typename T>
struct B : A<T> {
    void g() {
        this->f<int>();
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming

69
推荐指数
1
解决办法
2098
查看次数

从List <E>中取n个随机元素?

我如何从一个ArrayList<E>?理想情况下,我希望能够连续调用该take()方法来获取另一个x元素,而无需替换.

java random algorithm sampling

68
推荐指数
6
解决办法
4万
查看次数

C++中的内部类是自动的朋友吗?

如果我在C++中定义一个内部类,它是否自动成为包含它的类的朋友?例如,这是合法的:

class Outer {
public:
    class Inner {
    public:
        void mutateOuter(Outer& o);
    };

private:
    int value;
};

void Outer::Inner::mutateOuter(Outer& o) {
    o.value ++; // Legal?  Or not?
}
Run Code Online (Sandbox Code Playgroud)

我问,因为在我试过的一些编译器(VS2003)上,这段代码不起作用,但我至少听说过它在某些编译器上有效.我无法在C++规范中找到关于此的相关部分,如果有人能够引用某些特定内容,那就是说它是合法的还是不合法的.

c++ friend nested-class

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

反Fibonacci算法?

有许多计算任意n的F(n)的方法,其中许多方法具有很大的运行时和内存使用率.

但是,假设我想问相反的问题:

给定F(n)n> 2,n是什么?

(由于F(1)= F(2)= 1并且没有明确的逆,因此n> 2限制在那里.

解决这个问题最有效的方法是什么?通过枚举斐波纳契数并在达到目标数时停止,可以很容易地在线性时间内完成此操作,但有没有比这更快的方法呢?

编辑:目前,这里发布的最佳解决方案使用O(log n)内存在O(log n)时间内运行,假设数学运算在O(1)中运行并且机器字可以在O(1)空间中保存任何数字.我很好奇是否可以降低内存要求,因为你可以使用O(1)空间计算斐波纳契数.

algorithm math fibonacci

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

如果我在我的C++项目中使用C-Style强制转换,是否值得重构C++强制转换?

我在15K LOC C++项目中使用C风格的强制转换,90%的时间用于子类和基类之间的强制转换.

即使我读到使用它们是不好的,并且它们可能导致严重的错误,因为它们不像C++演员那样安全,我仍然觉得使用它们非常精细和舒适.

到目前为止,我没有遇到过我的项目中的一个错误,例如,一个意外错误的C-Style演员 - 真的.

我没有使用它们有两个主要原因:

  • 我对他们还不太了解
  • 我不喜欢他们的语法,他们更冗长,更难为我阅读

我的问题:

  • (为什么)我应该重构我的项目以使用C++风格的演员表吗?
  • 为什么我应该在未来的项目中使用C++风格的演员表?

我使用C++为我提供的所有其他优点,包括虚拟和抽象基类,命​​名空间,STL等,而不是新的类型转换语法." 你为什么不只是使用C呢? " 这个论点对我来说不起作用.

c++ refactoring casting

65
推荐指数
4
解决办法
5569
查看次数

在C中通过引用传递数组?

如何在C中通过引用传递一组结构?

举个例子:

struct Coordinate {
   int X;
   int Y;
};
SomeMethod(Coordinate *Coordinates[]){
   //Do Something with the array
}
int main(){ 
   Coordinate Coordinates[10];
   SomeMethod(&Coordinates);
}
Run Code Online (Sandbox Code Playgroud)

c arrays pass-by-reference

64
推荐指数
6
解决办法
22万
查看次数