相关疑难解决方法(0)

为什么这个随机数生成器生成相同的数字?

第一个起作用,但是第二个总是返回相同的值。为什么会发生这种情况,我应该如何解决呢?

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dis(0, 1);

    for(int i = 0; i < 10; i++) {

        std::cout << dis(gen) << std::endl;
    }return 0;
}
Run Code Online (Sandbox Code Playgroud)

一个不起作用:

double generateRandomNumber() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dis(0, 1);

    return dis(gen);
}



int main() {
    for(int i = 0; i < 10; i++) {
        std::cout << generateRandomNumber() << std::endl;
    }return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ random

2
推荐指数
1
解决办法
585
查看次数

通过构造函数创建的所有对象都具有相同的向量

我是 C++ 的新手,我正在尝试创建一个基本的遗传算法。我创建了一个 Chromosome 类,并想创建一个 Society 类,该类生成这些染色体的向量,其中包含随机生成的“基因”。基因是染色体中的向量,其值为 0 或 1。我正在测试染色体构造函数,所有对象都具有相同的基因向量。如何让构造函数生成随机值?我在下面包含了代码。任何其他编码实践或优化技巧也将不胜感激。

源文件

#include "Chromosome.h"
#include "Society.h"

using namespace std;

int main()
{
    Chromosome demo = Chromosome::Chromosome();
    Chromosome demo2 = Chromosome::Chromosome();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

染色体.h

#pragma once
#include <vector>
using namespace std;

class Chromosome
{
private:
    int fitness;
    vector<int> genes;

public:
    Chromosome();

    void generateGenes();

    int calculateFitness(),
        getFitness();

    vector<int> getGenes();
    void setGenes(vector<int> child);
};
Run Code Online (Sandbox Code Playgroud)

染色体.cpp

#include "Chromosome.h"
#include <cstdlib>
#include <ctime> 
#include <numeric>
using namespace std;

Chromosome::Chromosome()
{
    generateGenes();
    Chromosome::fitness = calculateFitness();
} …
Run Code Online (Sandbox Code Playgroud)

c++ oop genetic-algorithm

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

为什么 C++ Map 说该结构存在而实际上不存在?

我有一个名为 foo 的结构体,还有一个名为 mp 的映射,但由于某种原因,当我插入 {5, 0, 3} 并查询 {5, 3, 0} 时,映射显示它包含 {5, 3 , 0} 当它实际上没有时:

#include <bits/stdc++.h>

using namespace std;

struct foo {
    int v1, v2, v3;
    friend bool operator<(const foo &a, const foo &b) {
        return a.v1 < b.v1;
    }
    friend bool operator==(const foo &a, const foo &b) {
        return (a.v1 == b.v1) && (a.v2 == b.v2) && (a.v3 == b.v3);
    }
};

int main() {    
    map<foo, int> mp;
    mp[{5, 0, 3}] = 1;
    if(mp[{5, 3, …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap

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

C++从0到最大长整数获取随机数

我有以下功能:

typedef unsigned long long int UINT64;
UINT64 getRandom(const UINT64 &begin = 0, const UINT64 &end = 100) {
    return begin >= end ? 0 : begin + (UINT64) ((end - begin)*rand()/(double)RAND_MAX);
};
Run Code Online (Sandbox Code Playgroud)

每当我打电话

getRandom(0, ULLONG_MAX);
Run Code Online (Sandbox Code Playgroud)

要么

getRandom(0, LLONG_MAX);
Run Code Online (Sandbox Code Playgroud)

总是得到相同的价值562967133814800.我该如何解决这个问题?

c++

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

包装生成随机数的函数的最简单和最优雅的方法是什么?

函数如下:

float random_float(float min, float max)
{
    std::random_device rd;                                            // obtain a random number from hardware
    std::mt19937 gen(rd());                                           // seed the generator
    std::uniform_real_distribution<> distr((double)min, (double)max); // define the range
    return (float)distr(gen);
}
Run Code Online (Sandbox Code Playgroud)

我想避免每次调用此函数时调用前 3 行。我也不想用构造函数创建一个类,然后每次我只想生成一个随机数时都必须实例化它。我不太熟悉现代 C++ 特性的可能性,所以我想要一些想法。

c++ c++17

-1
推荐指数
1
解决办法
123
查看次数

标签 统计

c++ ×5

c++17 ×1

genetic-algorithm ×1

oop ×1

random ×1

stdmap ×1