在C ++中使用向量创建随机数

时间:2011-01-29 01:11:42

标签: c++ vector

我正在构建一个程序,其中用户键入数字(n)并创建一组随机数。因此,例如,如果用户输入8,则应创建八个随机数,它们的范围应为0-999,999。该程序似乎正在编译,唯一的问题是,只生成一个随机数。

#include <iostream>
#include <vector>
#include <cstdlib> 

using namespace std;

main()
{
    int n;
    int r;
    int i;
    int j;
    vector<int> v;

    cout << "Enter size of vector: ";
    cin >> n;

    for (i = 0; i < n; i++)
    {
        v.push_back(n);
        r = rand() % 1000000;
        v[i] = r;
    }

    cout << r << endl;

任何人都可以告诉我我做错了什么以及我需要做什么才能生成多个随机数?

4 个答案:

答案 0 :(得分:4)

显而易见的是:

for (int i=0; i<n; i++)
    v.push_back(rand()%1000000);

看起来您正在生成正确数量的随机数,但是当您完成后,您将打印r而不是v,这是包含随机数的内容。< / p>

修改:std::vector不直接支持operator<<,因此您可以使用循环打印内容:

for (int i=0; i<v.size(); i++)
    std::cout << v[i] << '\n';

或者您可以使用std::copy

std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));

当然,还有其他各种可能性......

编辑2:这是Chris Lutz在评论中建议的完整/正确版本:

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
#include "infix_iterator.h"

template <typename T>
std::ostream& operator<<(std::ostream &o, const std::vector<T>& v) { 
    o << "[";
    std::copy(v.begin(), v.end(), infix_ostream_iterator<T>(o, ", ")); 
    o << "]";
    return o; 
}

#ifdef TEST
int main() { 

    std::vector<int> x;

    for (int i=0; i<20; i+=2)
        x.push_back(i);

    std::cout << x << "\n";
    return 0;
}
#endif

虽然这不是绝对必要的,但它使用了我之前发布的ostream_infix_iterator

答案 1 :(得分:3)

使用srand(time(0))播种,这样你就会得到一个伪随机数

答案 2 :(得分:2)

看起来你的程序只打印出一个值:

cout << r << endl;

即使看起来给定的循环正确生成了正确数量的随机数。您确定没有创建正确数量的数字吗?

答案 3 :(得分:0)

在你的循环中移动cout << r << endl;,然后它会显示兰特数并继续循环。