更改向量中的位置值+自动创建该位置&如果需要,增加矢量范围

时间:2017-12-08 21:07:20

标签: c++ visual-studio vector

基本问题在上面,只是一个简单的例子来说明:
假设我想要一个6面骰子,直到我得到一个4然后再玩这个“游戏”10次。
现在我想获得一个非常基本的概率分布,即需要多少次投掷才能得到4。在2场比赛中,我只需要1次投球,4场比赛3次投球,3场比赛4次投球,以及1场比赛78投掷。所以在比赛之前我从未真正知道需要多少次投球,这场比赛可以无休止地进行 为了简化记录保存,我想使用一个向量,其中向量的位置/索引表示获得4所需的抛出次数,而位置的值表示需要多少次抛出的频率。所以前面例子中的这样一个矢量看起来很......像这样:{0,2,0,4,3,0,[另外72个零],1} 我将如何在C ++中编写代码?

(我很确定以前必须提出类似的问题,但找不到匹配的问题。而且我刚刚开始学习C ++,所以如果他们不是,请不要调用非常技术性的概念。需要了解解决方案。)

C++-Code/Pseudocode
vector<int> recordvec = {0};
for (1 to 10){
    game();
    recordvec[game.throwsneededtowin()]=recordvec[game.throwsneededtowin()] +1 
    //How to make sure that I don't get an out-of-range error here if game.throwsneededtowin() is e.g. 1464?
}
print recordvec

1 个答案:

答案 0 :(得分:0)

在OP请求时更改为std::vector

#include <iostream>
#include <vector>
#include <ctime> 

int main()
{
    std::vector<int> stats;
    std::srand(static_cast<unsigned int>(std::time(0)));

    for (int i = 0; i < 10; ++i)
    {
        int is4;
        size_t throws = 0;
        do 
        {
            is4 = int(std::rand() % 6 + 1 == 4); 
            if (throws < stats.size())
                stats[throws] += is4;
            else
                stats.push_back(is4); 
            ++throws;
        } 
        while (!is4);
    }

    for (auto const &stat : stats)
        std::cout << stat << " ";

    std::cout << std::endl;


    system("pause");
    return 0;
}

enter image description here