【问题标题】:How to make a list of binary numbers如何制作二进制数列表
【发布时间】:2015-02-18 19:42:20
【问题描述】:

我想要一个函数来制作二进制随机数列表。我不知道哪种方法适合这个目的。我可以使用数组、while 命令、链表或 std .. 来实现。

我想从函数中返回整个列表。在数组中,我认为我不能那样做。例如下面的函数只返回第一个元素。

long int  SourceNode::database(long int chunk_var[])
{
    srand ( time(0) );
    for(int j = 0; j<50 ;j++)
    {
        int myrand = rand() % 2 ;
        myrand = myrand & 0x3ff;
        chunk_var[j]= myrand;
    }
    return *chunk_var;
}

我想要一些东西来返回整个列表,因为我想在另一个函数中调用那个函数(整个列表)。除了制作数组之外,还有其他解决方案吗?

【问题讨论】:

  • rand() % 2 的结果将是01。这就是你得到的“模2”。 myrand = myrand &amp; 0x3ff 那时不会为你做任何事情,所以我不知道你为什么要这么做。
  • std::vector&lt;bool&gt;? boost::dynamic_bitset?
  • 当您使用 50 个值时,您可以使用 std::uint64_t 并使用位掩码/移位来获取所需值。

标签: c++ random


【解决方案1】:

您可以返回vector&lt;bool&gt;vector&lt;uint32_t&gt;。这将比任何其他选择更容易。顺便说一句,C++11 添加了一个新的random number generator,它更友好并且可能使用比rand更好的底层算法。

【讨论】:

  • " 可能使用比rand 更好的底层算法" 你可以删除"可能"
  • @Amxx 许多人确实使用蹩脚的 LCRNG,但没有什么可以阻止 C 库使用 MT19337 或 ChaCha 或更好的实现 rand。 (我发现 std::random 中对算法的明确说明有点不幸。)
  • 我的愿景是,您要么知道自己需要什么,然后在 std::radom 中使用特定的生成器,要么您只是不知道自己在做什么并使用 rand()rand() 和它下面可能使用的最差发电机一样糟糕……std::rand 使您能够控制发电机,并且控制总是更好
  • 非常感谢,它也可以生成二进制随机数吗?
  • @farshadsoheily 不同类型的随机数之间没有根本的区别。 int 是 32 个随机位。如果您查看std::random 规范,它总是谈论随机位。在std::random 中,您基本上有生成随机位的生成器,以及将这些随机位转换为bool/int/float/... 遵循不同分布的分布...
【解决方案2】:

只需将你得到的数组作为参数返回:

long int *SourceNode::database(long int chunk_var[])
{
    ......... // fill the array with numbers
    return chunk_var;
}

但是我想您还需要将数组长度作为另一个参数传递给函数,以便函数知道允许覆盖多少项。

【讨论】:

  • 我曾尝试使用指针,但它不起作用。实际上我正在寻找另一种解决方案。 .顺便说一句,谢谢;)
  • 实际上你甚至不需要返回任何东西——一旦调用者分配了一个数组,你的函数只需要填充它;数组保持在 if 的位置,因此无需通知调用函数它在哪里..
  • 你的意思是不返回任何东西它仍然有效?
  • 是的。当然,这需要将函数声明更改为 void SourceNode::database(long int chunk_var[]) 或更好的 void SourceNode::database(long int chunk_var[], int len) 或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
相关资源
最近更新 更多