0

在我尝试在一个我必须做的更大的程序中实现它之前,我正在测试如何做到这一点,并且出现了问题。此代码工作正常,但它继续只给出向量中的第一个数字。到底出了什么问题?

#include <iostream>
#include <string>
#include <vector>
#include "stdlib.h"
#include "time.h"

using namespace std;

int main()
{
    int randomNumber;
    int length;
    int i = 0;
    vector<int> x;
    x.push_back(12);
    x.push_back(1);
    x.push_back(6);
    x.push_back(34);
    x.push_back(23);

    srand(time(0));
    length = sizeof(x.capacity() - 1) / sizeof(int);

    while(i < 10){
        randomNumber = x[rand() % length];
        cout << randomNumber << endl;
        i++;
    }

    return 0;
}
4

3 回答 3

4

这个调用是不对的:

length = sizeof(x.capacity() - 1) / sizeof(int);

您应该改为使用x.size()来获取向量的大小。

你在上面的行中所做的是 - 计算它的大小x.capacity() - 1是一个整数,然后将它除以一个整数的大小。因此长度始终为 1,因此rand()%length始终为 0。

于 2013-03-31T20:18:42.443 回答
3

您计算length向量的方式是错误的:

length = sizeof(x.capacity() - 1) / sizeof(int);

因为返回当前为向量分配的存储空间的大小,以元素表示,因此在您的示例中等于。capacity() length1

您应该size()改用:

length = x.size();
于 2013-03-31T20:19:33.073 回答
0

我认为您只想使用x.size(), 而不是length

randomNumber = x[rand() % x.size()];
于 2013-03-31T20:18:57.727 回答