小编Yuu*_*shi的帖子

随机引擎差异

在C++ 11标准规定一个数用于随机数生成不同的引擎的:linear_congruential_engine,mersenne_twister_engine,subtract_with_carry_engine等.显然,这是旧的用法的一个很大的变化std::rand.

显然,这些引擎(至少有一些)的主要好处之一是大大增加了周期长度(它的名称已经内置std::mt19937).

但是,引擎之间的差异不太明显.不同发动机的优点和缺点是什么?应该何时使用另一个?通常应该首选合理的默认值吗?

c++ random c++11

50
推荐指数
3
解决办法
9651
查看次数

执行地址

以前没有意识到存在std::addressof,为什么它存在对我来说是有道理的:作为一种在存在重载的情况下获取地址的方法operator&.然而,实施稍微不透明.来自gcc 4.7.1:

template<typename _Tp>
inline _Tp*
__addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
{
  return reinterpret_cast<_Tp*>
(&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
}
Run Code Online (Sandbox Code Playgroud)

reinterpret_cast<_Tp*>是显而易见的.剩下的就是黑魔法.有人可以打破这实际上是如何工作的吗?

c++ c++11

30
推荐指数
4
解决办法
1851
查看次数

使用unsigned int与检查是否为负

假设我有一个带有整数的类,它应该总是带有简单的C'tor:

class A {
    unsigned int x;
    public:
    A(unsigned int X) : x(X) {}
};
Run Code Online (Sandbox Code Playgroud)

并且假设有人意外地创建了具有该值的A对象-5.当然,这是无效的,并且X将获得非常大的价值,因为MSB现在不代表数字符号.问题是,现在我无法真正检查数字是否为负数或无效(可能是按位?).

我应该避免unsigned使用平原int吗?通过这样做,如果给定值超出最大值或低于零,我可以抛出异常.

很想听听一些建议.

c++

24
推荐指数
2
解决办法
3888
查看次数

Java通过方法改变变量的值?

您好我想知道如何将变量作为参数发送到方法并让方法更改它.例如

public class Main {
    public static void main(String[] args) {
        int i = 2;
        doThis(i);
        System.out.println(i);  
    }

    public static void doThis(int i) {
        i = 3;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想打印出3而不是2.谢谢.

java

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

邻接列表图表示的实现

我刚刚开始使用图论.我无法弄清楚如何使用链表编码邻接列表.例如,如果我有这个图(未定向):

A--------B
|       /|\
|      / | \  
|     /  |  \
|    /   |   \
|   /    |    \
|  /     |     \
| /      |      \
C        E-------D
Run Code Online (Sandbox Code Playgroud)

我该如何编码?我知道如何使用邻接矩阵,但如何使用邻接列表和链接列表(c ++)来编码它?

c++ graph-theory data-structures

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

将可变参数包转换为(void)

我有效地遇到了以下问题:我希望能够构建-Wall -Wextra -Werror,但是,以下代码会抱怨未使用的参数:

struct foo
{
    template <typename... Args>
    static void bar()
    { }

    template <typename T, typename ... Args>
    static void bar(T&& value, Args&& ... args)
    {
    #ifdef DEBUG
        std::cout << value;
        bar(std::forward<Args>(args)...);
    #endif
    }
};
Run Code Online (Sandbox Code Playgroud)

第一个未使用的参数很容易修复:

    #ifdef DEBUG
        std::cout << value;
        bar(std::forward<Args>(args)...);
    #else // Shut the compiler up
        (void) value;
    #endif
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎么能用剩下的args呢?也不

(void)(args...);
Run Code Online (Sandbox Code Playgroud)

也不

(void)(args)...;
Run Code Online (Sandbox Code Playgroud)

会工作,都抱怨参数包没有扩展.

(这是在GCC 4.7.3下,如果这对潜在的解决方案有任何影响).

c++ variadic-templates c++11

8
推荐指数
1
解决办法
1304
查看次数

互质因子的最大乘积

我基本上有一个问题可归结为以下内容:给定一些(整数)数n,找到一组互质数,比如c =(c 1,c 2,...,c k),每个小于n,满足:

1)所有c i的乘积是最大的.

2)所有c i的总和等于n.

这可能最终成为MathOverflow的一个问题,但有没有任何类型的非暴力算法来做到这一点?

algorithm math

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

跟踪函数声明中的const&或&&

我正在查看std::optional<T>关于cppreference的API .我很好奇如何value_or工作.看那里,似乎有两个重载:

template< class U > 
constexpr T value_or( U&& value ) const&;

template< class U > 
T value_or( U&& value ) &&;
Run Code Online (Sandbox Code Playgroud)

什么是const&&&尾随函数声明?声明函数const和声明函数之间有什么区别const&

c++ c++11

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

如何在另一个进程的内存中搜索字符串?

目前我正在使用这个功能,我通过互联网阅读几个松散相关的问题拼凑而成.我遇到的问题是,我第一次运行它时返回错误,但不幸的是我无法重现它.现在,当我运行它时,它每次只返回0.

DWORD GetAddressOfString(char *input)
{
    unsigned char *p = NULL;
    MEMORY_BASIC_INFORMATION info;
    HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, _processID);

    for (p = NULL; VirtualQueryEx(process, p, &info, sizeof(info)) == sizeof(info); p += info.RegionSize)
    {
        if (info.State == MEM_COMMIT && (info.Type == MEM_MAPPED || info.Type == MEM_PRIVATE))
        {
            char *buffer = new char[info.RegionSize];
            SIZE_T bytesRead;
            ReadProcessMemory(process, p, &buffer, info.RegionSize, &bytesRead);
            for (int i = 0; i <= (info.RegionSize - sizeof(input)); i++)
            {
                if (memcmp(input, &buffer[i], sizeof(input)) == 0)
                {
                    return i;
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi

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

未来[期权[期货[期权[布尔]]简化期货和期权?

我一直在努力简化我在Scala中做期货的方式.我得到了一点,Future[Option[Future[Option[Boolean]]但我在下面进一步简化了它.有没有更好的方法来简化这个?

路过的"失败"未来并不似乎像要做到这一点的最好办法.即在顺序世界中,我只是返回"FAIL !!" 任何时候它失败而不是继续到最后.还有其他方法吗?

val doSimpleWork = Future {
  //Do any arbitrary work (can be a different function)
  true //or false
}

val doComplexWork = Future {
  //Do any arbitrary work (can be a different function)
  Some("result") //or false
}

val failed = Future {
  //Do no work at all!!! Just return
  false
}

val fut1 = doSimpleWork
val fut2 = doSimpleWork

val fut3 = (fut1 zip fut2).map({
  case (true, true) => true
  case _ => …
Run Code Online (Sandbox Code Playgroud)

scala akka

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