小编Alm*_*ely的帖子

Monte Carlo Sims - 请检查我的算法

基本上,问题模拟以下内容:

有一个带有50个绿球和50个红球的骨灰盒.

我被允许从瓮中挑球,没有替换,遵守以下规则:对于每一个挑选的红球,我输了一美元,因为每一个选中的绿球,我都会获得一美元.

我可以随时停止挑选.最糟糕的情况是我选择所有100和净0.

问题是提出一个最佳停止策略,并创建一个程序来计算策略的预期价值.

我的策略是继续挑球,而选择另一球的预期价值是积极的.

也就是说,停止规则是DYNAMIC.

在Latex中,这是图像中的递归公式:

http://i.stack.imgur.com/fnzYk.jpg

#include <stdio.h>
#include <math.h>
#include <stdlib.h>



double ExpectedValue(double, double);
double max(double, double);

main() {

double g = 50;
double r = 50;


double EV = ExpectedValue(g, r);

printf ("%f\n\n", EV);

system("PAUSE");

}


double ExpectedValue(double g, double r){

double p =  (g / (g + r));

double q = 1 - p;

if (g == 0)

return r;

if (r == 0)

return 0;

double E_gr = max ((p * ExpectedValue (g …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

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

std :: vector本身的地址稳定吗?

如果我取a的地址std::vector,并在插入元素后重新分配,我可以假设它的地址不会改变吗?

谢谢.

c++ vector

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

Makefile 构建共享库

我一直在构建一个C++11库,并且头文件/源文件的数量已经增长到编译程序调用它需要将 20 多个.cpp文件传递到g++. 我一直在阅读共享库,这似乎是最好的解决方案。

但是,由于标题/源经常更改,我希望创建一个makefile可以自动.so从标题和源生成所有文件的文件。

为了更好地展示我正在尝试做什么,我将使用我的一个子库,Chrono并展示我将如何手动执行此操作。

我首先像这样创建目标文件,

$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/DateTime.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/Schedule.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/Duration.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/DayCount.cpp
Run Code Online (Sandbox Code Playgroud)

这样我现在在当前目录中有DateTime.o, Schedule.o, Duration.o, 和DayCount.o。然后我创建.so文件,

$ g++ -shared -Wl,-soname,libChrono.so.1 -o libChrono.so.1.0.1 DateTime.o Schedule.o Duration.o DayCount.o -lc
Run Code Online (Sandbox Code Playgroud)

那我去,

$ rm ./*.o && ldconfig …
Run Code Online (Sandbox Code Playgroud)

c++ linux makefile

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

运行时的函数模板类型推导

我试图理解为什么以下编译/运行尽管在运行时解析模板类型.是因为单独if/else调用f足以告诉编译器创建void f<double>(double)void f<std::string>(std::string)

test.hpp

#include <type_traits>
#include <string>
#include <iostream>

template <typename T>
void f(T x) {
    if(std::is_same<T, std::string>::value)
        std::cout << "String: " << x;
}
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include <iostream>
#include "test.hpp"

int main(int, char** argv) {
    double x(std::stod(argv[1]));

    if(x < 42) f(x);
    else f(std::to_string(x));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ (clan)g++ -std=c++14 test.cpp
$ ./a.exe 41

$ ./a.exe 43
String: 43.000000
Run Code Online (Sandbox Code Playgroud)

c++ templates runtime function compile-time

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

2d矢量初始化

我放弃了尝试将2d数组传递给函数,其中维度在编译时是未知的.经过一些研究,似乎二维矢量可能是一个很好的替代品.我只是想确认这是声明一个维度totalRows X totalColumns的二维向量的正确方法,初始化每个单元格以包含空格字符:

vector<vector<char> > world(totalRows, vector<char>(totalColumns, ' '));
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

C++从空格分隔的文本文件中填充字符串向量

我有一个空格分隔的文本文件,我需要从中提取单个单词以填充a vector<string>.

我试过玩strtok,但我知道这不起作用,因为strtok返回a char pointer.有没有办法从文件中提取单词,并string vector用它们填充?谢谢!

c++

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

指针所有权

我有一个指针数组:pArray[rows][columns],每个元素都可以包含一个指向对象的指针.一些对象main()在堆上实例化,有些对象本身也在堆上实例化:也就是说,我传递pArray给一个对象成员函数,该函数创建了一个新对象,并在其中放入一个指针pArray.

现在,当我想要删除指向对象的指针时pArray,这里是否有所有权?意思是,如果一个对象创建了一个新对象并放置了一个指向它的指针,那么pArray只能创建者对象在该指针上调用delete吗?或者我可以main()通过将数组传递给它们来实现它和其他对象吗?

更多细节:

代码模拟网格上的捕食者猎物模型(pArray).于是,我开始从一个文件中的初始网格配置读书,和实例化对象(天敌,和猎物),对pArraymain().但是捕食者和猎物可以繁殖,因此物体会产生新的物体并通过传递pArray给它们,它们会实现它们的孩子pArray.

c++ pointers

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

将逗号分隔的参数传递给<<运算符

我正在尝试Eigen为容器类完成类似于高级初始化的操作.

即在main,我想填写类型的对象DynamicArray如下:

main.cpp中

// Create 3 x 3 Dynamic array and fill with 0's
DynamicArray da(3, 3, 0);

da << 1, 2, 3,
      4, 5, 6,
      7, 8, 9;
Run Code Online (Sandbox Code Playgroud)

我用来尝试实现此目的的方法是:

DynamicArray.hpp

template <typename T>
class DynamicArray {

        // ...

public:

        // ...

    template <typename... Args,
              typename = typename std::enable_if<ArgPackSameTruth<
                                             std::is_convertible<Args, T>...>::value,
                                             T>::type
    > void operator<<(Args... x) {

        typename std::vector<T> arg_vect{std::forward<Args>(x)...};

        std::cout << arg_vect.size() << "\n";

        // Load contents of arg_vect into *this...

        return;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading c++11

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