小编Ric*_*ard的帖子

如何简洁,便携,彻底地播种mt19937 PRNG?

我似乎看到很多答案,有人建议使用它<random>来生成随机数,通常伴随着这样的代码:

std::random_device rd;  
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 5);
dis(gen);
Run Code Online (Sandbox Code Playgroud)

通常这会取代某种"邪恶的憎恶",例如:

srand(time(NULL));
rand()%6;
Run Code Online (Sandbox Code Playgroud)

我们可能会批评旧的方式,认为time(NULL)提供低熵,time(NULL)可预测,最终结果是不均匀的.

但所有这一切都适用于新的方式:它只有一个更光亮的贴面.

  • rd()返回一个unsigned int.这至少有16位,可能是32位.这还不足以为MT的19937位状态提供种子.

  • 使用std::mt19937 gen(rd());gen()(以32位播种并查看第一个输出)不能提供良好的输出分布.7和13永远不会是第一个输出.两粒种子产生0.十二粒种子产生1226181350.(链接)

  • std::random_device可以(有时是)实现为具有固定种子的简单PRNG.因此,它可能在每次运行时产生相同的序列.(链接)这甚至比time(NULL).

更糟糕的是,尽管存在它们包含的问题,但复制和粘贴上述代码片段非常容易.对此的一些解决方案需要获得可能不适合每个人的大型 .

鉴于此,我的问题是如何在C++中简洁,便携,彻底地播种mt19937 PRNG?

鉴于上述问题,一个很好的答案:

  • 必须完全播种mt19937/mt19937_64.
  • 不能单独依赖std::random_devicetime(NULL)作为熵的来源.
  • 不应该依赖Boost或其他图书馆.
  • 应该适合少量的线条,这样看起来很好,可以复制粘贴到答案中.

思考

  • 我目前的想法是,输出来自std::random_device(可能通过XOR)time(NULL),从地址空间随机化得到的值,以及硬编码常量(可以在分配期间设置)以获得熵的最佳努力.

  • std::random_device::entropy() 没有很好地说明std::random_device可能做什么或不做什么.

c++ random c++11

106
推荐指数
4
解决办法
7189
查看次数

检查两个链表是否合并.如果是的话,在哪里?

这个问题可能已经过时了,但我想不出答案.

比如,有两个不同长度的列表,在某一点合并 ; 我们怎么知道合并点在哪里?

条件:

  1. 我们不知道长度
  2. 我们应该只解析每个列表一次.

两个合并链表的示例.

algorithm linked-list data-structures

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

d3轴标记

如何在d3中为轴添加文本标签?

例如,我有一个带有x和y轴的简单折线图.

在我的x轴上,我有从1到10的刻度.我想在它下面出现"天"这个词,所以人们知道x轴正在计算天数.

同样,在y轴上,我将数字1-10作为刻度,我希望"吃三明治"这两个词出现在侧面.

有一个简单的方法吗?

javascript axis-labels d3.js

90
推荐指数
3
解决办法
7万
查看次数

jQuery ID Selector("#id")返回Array

我在noConflict模式下使用jQuery v1.6.1.

我正在使用id选择器$j("#divID").value来获取存储项的值.

不幸的是,$j("#inputID")返回一个项目列表,所以我必须使用它$j("divID")[0].value来获取对象的值.这[0]似乎是不必要的,因为根据定义,只有一个具有任何给定id的html元素.

这是从IDed对象获取值的适当方法吗?或者,还有更好的方法?

谢谢!

javascript jquery

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

在Doxygen中引用参数的正确方法是什么?

我有一个功能的以下Doxygen文档:

/**
  @brief Does interesting things

  @param[in]  pfirst The first parameter: a barrel full of monkeys

  @pre
    "pfirst" must have been previously passed through BarrelFiller()
*/
Run Code Online (Sandbox Code Playgroud)

请注意,这pfirst是一个参数,并在前提条件中引用它.

我在这里用引号包围它,因为我想从文本的其余部分中脱颖而出.但是这样做会很好,Doxygen会强调命令,最好将它链接到参数定义.有没有办法做到这一点?

如果只使用默认配置(或其微小的改动)就会发生这种情况会特别好.

doxygen

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

缺少单独的debuginfos,请使用:debuginfo-install glibc-2.12-1.47.el6_2.9.i686 libgcc-4.4.6-3.el6.i686 libstdc ++ - 4.4.6-3.el6.i686

CentOS 6.2 + GNU gdb(GDB)红帽企业Linux(7.2-50.el6)

当我用GDB调试一个简单的c ++代码时,我看到了以下警告:

Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6_2.9.i686 libgcc-4.4.6-3.el6.i686 libstdc++-4.4.6-3.el6.i686
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但没有一个能解决问题:

  1. 搜索SO

  2. yum install glibc

  3. debuginfo-install glibc-2.12-1.47.el6_2.9.i686 libgcc-4.4.6-3.el6.i686 libstdc++-4.4.6-3.el6.i686

事实上,当我逐个安装这些RPM时,我才意识到它们已经安装好了.

[root@localhost Excluded]# rpm -ivh glibc-2.12-1.47.el6_2.9.i686.rpm 
Preparing...                ########################################### [100%]
    package glibc-2.12-1.47.el6_2.9.i686 is already installed
[root@localhost Excluded]# ls *.rpm
glibc-2.12-1.47.el6_2.9.i686.rpm  libgcc-4.4.6-3.el6.i686.rpm
[root@localhost Excluded]# rpm -ivh libgcc-4.4.6-3.el6.i686.rpm 
Preparing...                ########################################### [100%]
    package libgcc-4.4.6-3.el6.i686 is already installed
[root@localhost Excluded]# rpm -ivh libstdc++-4.4.6-3.el6.i686.rpm 
warning: libstdc++-4.4.6-3.el6.i686.rpm: Header V4 DSA/SHA1 Signature, key ID 192a7d7d: NOKEY
Preparing...                ########################################### [100%]
    package libstdc++-4.4.6-3.el6.i686 is already installed …
Run Code Online (Sandbox Code Playgroud)

gdb centos

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

C++错误'对Class :: Function()的未定义引用

我想知道是否有人可以帮我解决这个问题 - 我只是C++的新手,这给我带来了相当多的麻烦.

我正在尝试制作相对简单的Deck和Card类对象.

错误显示在"Deck.cpp",声明一组卡片,然后当我尝试用卡片对象填充数组时.它说有一个未定义的引用Card::Card(),Card::Card(Card::Rank, Card::Suit)Card::~Card().

我的所有包括看似正确,所以我不知道出了什么问题.

代码如下:

加入deck.h

#ifndef DECK_H
#define DECK_H
#include "card.h"

class Deck
{
 public:
    Deck();
    ~Deck();
    Card DealNextCard();
    void Shuffle();
    void DisplayDeck();
protected:
private:

};

#endif // DECK_H
Run Code Online (Sandbox Code Playgroud)

deck.cpp

#include "Deck.h"
#include "card.h"

using namespace std;

const int NUM_TOTAL_CARDS = 52;
const int NUM_SUITS = 4;
const int NUM_RANKS = 13;
Card* cardArray;
void Deck() {
    cardArray = new Card[NUM_TOTAL_CARDS];
    int cardCount = 0;
    for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ oop undefined

53
推荐指数
3
解决办法
35万
查看次数

在Python中输入交互模式

我正在运行我的Python程序,并且有一个重点是跳入并查看正在发生的事情,然后再次退出.有点像临时控制台模式.

在Matlab中,我会使用keyboard命令来执行此操作,但我不确定python中的命令是什么.

有没有办法做到这一点?

例如:

for thing in set_of_things:
    enter_interactive_mode_here()
    do_stuff_to(thing)
Run Code Online (Sandbox Code Playgroud)

enter_interactive_mode()电话,我想去那里,环顾四周,然后离开,并有计划继续运行.

python interactive

49
推荐指数
5
解决办法
3万
查看次数

将cURL内容结果保存为C++中的字符串

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
  _getch();
  return 0;
}

string contents = "";
Run Code Online (Sandbox Code Playgroud)

string contents ="";

我想将curl html内容的结果保存在字符串中,我该怎么做?这是一个愚蠢的问题,但不幸的是,我无法在CURL C++示例中找到任何地方感谢!

c++ curl

47
推荐指数
3
解决办法
5万
查看次数

jQueryUI自动完成ComboBox太长

我的jQuery UI AutoComplete ComboBox在右侧没有滚动条,并且非常不可思议,如下所示.我想将这个列表限制在一个合理的长度 - 有关如何实现这一点的任何想法?谢谢!

jQuery UI AutoComplete ComboBox

combobox jquery-ui autocomplete

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