我正在测试如何做到这一点,然后我尝试在一个更大的程序中实现它,我必须做,并且出现问题。此代码工作正常,但它继续只给出向量中的第一个数字。究竟出了什么问题?
#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;
}
答案 0 :(得分:4)
这次电话不对:
length = sizeof(x.capacity() - 1) / sizeof(int);
您应该使用x.size()
来获取向量的大小。
你在上面的行中做的是 - 计算x.capacity() - 1
的大小,它是一个整数,然后除以整数的大小。因此长度始终为1,因此rand()%length
始终为0.
答案 1 :(得分:3)
计算向量的length
的方式是错误的:
length = sizeof(x.capacity() - 1) / sizeof(int);
因为capacity()
返回当前为向量分配的存储空间的大小,以元素表示,因此length
等于1
在你的例子中。
您应该使用size()
代替:
length = x.size();
答案 2 :(得分:0)
我认为您只想使用x.size()
,而不是length
:
randomNumber = x[rand() % x.size()];