小编Ger*_*ner的帖子

在C++ 11中设置std :: thread priority的便携方式

在后C++ 11世界中设置std :: thread实例优先级的正确方法是什么

是否有一种可移植的方式,至少在Windows和POSIX(Linux)环境中有效?

或者是获取句柄并使用特定操作系统可用的本机调用的问题?

c++ portability c++11 thread-priority stdthread

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

在C++ 11/14中有效地生成随机字节数据

我的要求是生成随机字节的数据(非随机数),也就是统一分布的位.

因此,我想知道使用C++ 11/14随机设施执行此操作的正确/有效方法是什么.我的例子有环顾四周,但他们似乎把重点放在数生成(整数,浮点数等)

我正在使用的当前解决方案如下:

#include <vector>
#include <random>

int main()
{
   std::random_device rd;
   std::uniform_int_distribution<int> dist(0,255);
   std::vector<char> data(1000);
   for (char& d : data)
   {
      d = static_cast<char>(dist(rd) & 0xFF);
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ random distribution c++11

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

使用std :: tuple作为std :: unordered_map的键

使用下面的代码,我在MSVC中得到一个非常令人困惑的错误,似乎建议将键类型(std :: tuple)转换为std :: string.

#include <iostream>
#include <string>
#include <tuple>
#include <utility>
#include <unordered_map>

typedef std::tuple<std::string,int,char> key_t;

struct key_hash : public std::unary_function<key_t, std::size_t>
{
   std::size_t operator()(const key_t& k) const
   {
      return std::get<0>(k)[0] ^ std::get<1>(k) ^ std::get<2>(k);
   }
};

struct key_equal : public std::binary_function<key_t, key_t, bool>
{
   bool operator()(const key_t& v0, const key_t& v1) const
   {
      return (
               std::get<0>(v0) == std::get<0>(v1) &&
               std::get<1>(v0) == std::get<1>(v1) &&
               std::get<2>(v0) == std::get<2>(v1)
             );
   }
};

struct data
{
   std::string x;
};

typedef std::unordered_map<key_t,data,key_hash,key_equal> …
Run Code Online (Sandbox Code Playgroud)

c++ stl unordered-map tuples compiler-errors

10
推荐指数
1
解决办法
8035
查看次数

实例化c ++ 11随机设施的正确方法是什么

在查看了关于在C++中使用新的"随机"工具的各种示例之后,我对最佳实践感到有些困惑 - 特别是与各种实例的生命周期有关.

例如,在一些示例中,"random_device"的使用在诸如函数的局部范围中是静态的,或者是静态全局变量或者仅仅是本地的.

--- TU ---

static std::random_device global_source;


void foo()
{
   static std::random_device local_static_source;
   static std::mt19937 gen(local_static_source());
   std::uniform_int_distribution<> dist(0,10);
   ...
   dist(gen);
   ...
}

void boo()
{
   std::mt19937 gen(global_source());
   std::uniform_int_distribution<> dist(0,10);
   ...
   dist(gen);
   ...
}

void roo()
{
   std::random_device local_source;
   std::mt19937 gen(local_source());
   std::uniform_int_distribution<> dist(0,10);
   ...
   dist(gen);
   ...
}

int main()
{
   static std::mt19937 gen(global_source());
   std::uniform_int_distribution<> dist(0,10);
   ...
   dist(gen);
   ...
  return 0;
}

--- TU ---
Run Code Online (Sandbox Code Playgroud)

Q1:如果多个线程可以访问"foo"或"boo",那么生成器和源是否可以是静态的? - 有没有像shared_ptr那样的线程安全保证?

问题2:标准中是否有任何措辞可以讨论与实例化相关的假设和问题?

c++ random instantiation c++11

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

反混淆C++源代码

为了寻找一个c ++解析器,我最近偶然发现了下面的项目.在其中有一个解析器似乎非常适合我的需求,但我相信作者故意混淆了一些核心代码片段,这使得检查代码有点困难.

https://github.com/ArashPartow/math-parser-benchmark-project/blob/master/fparser/fpoptimizer.cc

文件和作者网站上有一个关于有一个简单的反混淆版本的描述,但是指示的网站似乎只有一个死链接,并且试图联系作者的尝试没有结果.

我想知道其他SOers是否会知道一种快速简便的方法来扭转上述文件中的混淆.

现在我不确定,因为我不是C++专家,但可能是因为代码的存在是合理的原因,可能是因为文件的名称表明它可能是出于性能原因.

c++ math obfuscation optimization parsing

0
推荐指数
2
解决办法
2542
查看次数

负基础情况的类Pow函数

std :: pow适用于大多数基本值和指数值的组合.

然而,当基数是负数和分数时,std :: pow龙骨.

在下面的示例中,当预期值大致为:-1.2332863005546时,返回NaN(根据定义)

#include <cmath>
#include <cstdio>

int main()
{
    double a = -1.1;
    double b =  2.2;
    double c = std::pow(a,b);
    printf("%5.2f ^ %5.2f = %25.10f\n",a,b,c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:关于如何开发通用pow函数的任何想法,当基数为负时返回非NaN值?

更新 - 总会有一类结果只能用复数表示.

c++ algorithm math exponentiation

0
推荐指数
1
解决办法
2708
查看次数