在C++ 11标准规定一个数用于随机数生成不同的引擎的:linear_congruential_engine,mersenne_twister_engine,subtract_with_carry_engine等.显然,这是旧的用法的一个很大的变化std::rand.
显然,这些引擎(至少有一些)的主要好处之一是大大增加了周期长度(它的名称已经内置std::mt19937).
但是,引擎之间的差异不太明显.不同发动机的优点和缺点是什么?应该何时使用另一个?通常应该首选合理的默认值吗?
以前没有意识到存在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'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吗?通过这样做,如果给定值超出最大值或低于零,我可以抛出异常.
很想听听一些建议.
您好我想知道如何将变量作为参数发送到方法并让方法更改它.例如
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.谢谢.
我刚刚开始使用图论.我无法弄清楚如何使用链表编码邻接列表.例如,如果我有这个图(未定向):
A--------B
| /|\
| / | \
| / | \
| / | \
| / | \
| / | \
| / | \
C E-------D
Run Code Online (Sandbox Code Playgroud)
我该如何编码?我知道如何使用邻接矩阵,但如何使用邻接列表和链接列表(c ++)来编码它?
我有效地遇到了以下问题:我希望能够构建-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下,如果这对潜在的解决方案有任何影响).
我基本上有一个问题可归结为以下内容:给定一些(整数)数n,找到一组互质数,比如c =(c 1,c 2,...,c k),每个小于n,满足:
1)所有c i的乘积是最大的.
2)所有c i的总和等于n.
这可能最终成为MathOverflow的一个问题,但有没有任何类型的非暴力算法来做到这一点?
我正在查看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&?
目前我正在使用这个功能,我通过互联网阅读几个松散相关的问题拼凑而成.我遇到的问题是,我第一次运行它时返回错误,但不幸的是我无法重现它.现在,当我运行它时,它每次只返回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) 我一直在努力简化我在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)