程序不会崩溃也不会完全执行

多罗斯凯维奇

自从我处理这个问题以来已经有几个小时了。我想知道是否有人可以指出我做错了什么,如果可能的话 - 如何解决它。本质上,我只是尝试生成n多个对象对并将它们存储到vector<pair<Foo, Foo>>. 该算法涉及随机数生成器。我使用 STL<random>及其组件,如m19937uniform_real_distributionuniform_int_distribution下面是我正在尝试做的代表我手头案例的简化版本。第二个循环总是缩短。但是,我看不出原因。从本质上讲,我永远不会看到程序完全执行。最后两条消息从不显示。

程序

#include <iostream>
#include <vector>
#include <random>
#include <utility>

// utility
using std::pair;

// random
using std::mt19937;
using std::uniform_int_distribution;
using std::uniform_real_distribution;

// iostream
using std::cout;
using std::endl;

// vector
using std::vector;

class Event{
private:
  double x, y;
public:
  Event(const double X, const double Y);
};

Event::Event(const double X, const double Y): x(X), y(Y){}

int main(){
  cout << "Initializing storage..." << endl;
  vector<Event> population;
  vector<pair<Event,Event>> selection;

  cout << "Initializing necessary member variables..." << endl;
  const unsigned int SEED = 14112017;
  const unsigned int MAX_ITERATIONS = 10000;

  const double MIN = 1;
  const double MAX = 10000;

  mt19937 engine(SEED);

  cout << "Generating the initial population..." << endl;
  uniform_real_distribution<> real_distribution(MIN, MAX);
  for(unsigned int i = 0; i < MAX_ITERATIONS; ++i){
    double x = real_distribution(engine);
    double y = real_distribution(engine);

    Event event(x, y);

    population.push_back(event);
  }
  cout << "Success! The initial population has been generated successfully" << endl;

  population.shrink_to_fit();

  cout << "Starting the selection process..." << endl;
  unsigned int random = 0;
  uniform_int_distribution<> int_distribution(MIN, MAX);
  for(unsigned int i = 0; i < MAX_ITERATIONS; ++i){
    random = int_distribution(engine);
    Event event_x = population.at(random);

    random = int_distribution(engine);
    Event event_y = population.at(random);

    pair<Event, Event> bound(event_x, event_y);

    selection.push_back(bound);
  }
  cout << "Success! The selection process has been completed successfully" << endl;

  selection.shrink_to_fit();

  cout << "population size: " << population.size() << endl;
  cout << "selection size: " << selection.size() << endl;

  return 0;
}

我使用 cygwins C++ 编译器编译上述内容,并在命令提示符下执行代码。操作系统是 Windows 10 x64。盒子有 32 GB 内存。

阿兰

uniform_int_distributions 的构造函数如下:

explicit uniform_int_distribution( IntType a = 0,
    IntType b = std::numeric_limits<IntType>::max() );

默认情况下,它返回一个整数,该整数涵盖该类型的所有正值。该范围包括第二个参数的值。如果不是,那么指定我们想要所有正整数会很麻烦。

cppreference.com 没有记录它,但 C++ 标准做了: 谢谢@Cubbi
在 cppreference.com或 C++ 标准中有记录:

26.5.8.2.1 类模板 uniform_int_distribution [rand.dist.uni.int]
1 uniform_int_distribution 随机数分布产生随机整数 i,a ≤ i ≤ b,根据常数离散概率函数分布
[...]
// constructors and reset functions explicit uniform_int_distribution(IntType a = 0, IntType b = numeric_limits<IntType>::max());

这里:

  uniform_int_distribution<> int_distribution(MIN, MAX);
  for(unsigned int i = 0; i < MAX_ITERATIONS; ++i){
    random = int_distribution(engine);
    Event event_x = population.at(random);

    random = int_distribution(engine);
    Event event_y = population.at(random);

random可以取MAX超出population向量范围的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

程序不会执行pthread

来自分类Dev

Bash脚本-不会完全执行

来自分类Dev

以下程序不会崩溃吗?

来自分类Dev

程序正常崩溃,但Valgrind不会崩溃

来自分类Dev

Xamarin不会崩溃就不会部署应用程序

来自分类Dev

这个C程序为什么不会崩溃?

来自分类Dev

Java:引发异常后程序不会崩溃

来自分类Dev

为什么程序永远不会在完全相同的时间执行?

来自分类Dev

程序不会执行功能,但也不会出错

来自分类Dev

执行命令不会继续的Java程序

来自分类Dev

C#程序不会从Java执行

来自分类Dev

可执行程序不会运行

来自分类Dev

iOS 7应用程序冻结而不会崩溃

来自分类Dev

应用程序冻结,但不会崩溃?(VISUAL BASIC)

来自分类Dev

将数组声明为静态不会使程序崩溃

来自分类Dev

应用程序可立即打开和关闭,而不会崩溃

来自分类Dev

应用程序中的短音而不会使其崩溃

来自分类Dev

为什么这个带有“abort()”的 C 程序不会崩溃?

来自分类Dev

动态填充 QTreeView 使应用程序不会崩溃

来自分类Dev

Xcode不会克服崩溃

来自分类Dev

ComboBoxItem不会崩溃

来自分类Dev

导航栏不会崩溃

来自分类Dev

相同的Navbar不会崩溃

来自分类Dev

C++ Visual Studio 不会完全运行程序

来自分类Dev

应用程序在发布模式下崩溃,但在启用僵尸程序后不会崩溃

来自分类Dev

CollapsingToolbar不会完全折叠

来自分类Dev

KDE不会完全删除

来自分类Dev

KDE不会完全删除

来自分类Dev

为什么大型本地数组会使我的程序崩溃,而全局数组却不会崩溃?