我正在寫需要填寫使用2名不同的種子名單隨機整數(小於1000)兩個向量的程序。當我嘗試使用種子時,我應該使用它給我一個非常奇怪的輸出。函數srand工作不正常
這裏是我到目前爲止已經寫的代碼...
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
void Vectors(vector <int> v1, vector <int> v2, int s1, int s2) {
srand(s1);
for (int i = 0; i < 200; i++) {
v1.push_back(rand() % 1000 + 1);
//v1[i] = rand() % 1000 + 1;
}
srand(s2);
for (int i = 0; i < 100; i++) {
v2.push_back(rand() % 1000 + 1);
//v2[i] = rand() % 1000 + 1;
}
}
void prnt(vector<int> v) {
for (int i = 0; i < 20; i++) {
cout << v[i] << " ";
if (i == 9 || i == 19) {
cout << endl;
}
}
}
int main() {
vector<int> vec1;
vector<int> vec2;
vec1.resize(200);
vec2.resize(100);
Vectors(vec1, vec2, 1, 3);
prnt(vec1);
prnt(vec2);
return 0;
system("pause");
}
然而,當我運行它的輸出我得到的是這樣的......
0 29046 -309340552 29046 32 0 134113 0 0 0
-309339528 29046 64 0 48 0 0 0 986 169
0 0 -309340552 29046 32 0 134113 0 0 0
-309339528 29046 64 0 48 0 0 0 986 169
此外,將如果vec1和2未初始化爲某種大小,則不允許使用Vectors方法。
我剛剛從Java轉移到C++,所以你可以給我任何幫助將是非常讚賞,因爲它是令人抓狂被卡住的東西在Java中
偏離主題,但爲什麼把'system(「pause」);''返回0後''? – Amadeus
有兩種方法來處理矢量。你可以調整它們的大小,因爲你正在分配N個項目,你可以把它們分配爲'v [0] .. v [v.size() - 1]',或者你可以使用'push_back'將大小增加一個並在最後添加新項目。你現在正在做的是爲200個項目分配空間,然後在最後增加200個,這可能不是你想要做的。 –
有時候錯誤可以挽救你的生命。現在是停止使用rand()並切換到現代C++隨機生成器的時候了。 – CroCo