[英]C++ console-mode program produces different result on Mac to Windows
我的任務是實現一種簡單的替代加密方案,並為其提供編碼器。
即使已指示我編譯該程序並在Windows的Visual Studio中運行,以下程序仍適用於Mac。
我的理由是我擁有一台Mac,並認為在我喜歡的任何計算機上編寫程序,然后在必要時進行調整也是一樣的。 畢竟,這只是一個控制台模式的應用程序。
我沒想到該程序在Mac上的表現如何:
在Mac上,種子似乎根本不起作用。 即使我只使用了兩個不同的種子,它仍在繼續產生新的排列。
Windows上的Visual Studio生成了產生每個種子值唯一的排列的預期結果。 對於Mac上的random_shuffle函數而言,與PC上的組件不同,srand只是沒有任何意義嗎?
下面的代碼,然后輸出剪切和粘貼。 兩者均來自Mac X-Code 7.2編譯。
因此,基本上,為什么不對種子做出預期的結果?
/code
#include <string>
#include <cstdlib>
#include "algorithm"
#include <iostream>
using namespace std;
const string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,í ";
string cp(unsigned seed) {
srand(seed);
string permutation = ALPHABET;
// using built-in random generator:
random_shuffle(permutation.begin(), permutation.end());
return permutation;
}
int main(int argc, char** argv) {
unsigned seedy = 100;
string what = cp(seedy);
cout << what << endl;
seedy = 200;
what = cp(seedy);
cout << what << endl;
seedy = 100;
what = cp(seedy);
cout << what << endl;
seedy = 100;
what = cp(seedy);
cout << what << endl;
getchar();
return 0;
}
/code
控制台輸出:
'XQACKHSLOJ,TRBZNGV.W FIUEYDMP
OILQPNSWBAHYGTD'EFKV,XMR。 蘇州
J,DKXTHP'RQOEZCYG。 SMFIULABVNW
WNJTCYA EHSDPQLKO.ZURGF,'VMIBX
srand(seed)
可能會或不會影響random_shuffle
的結果; 它取決於實現,因此您不應該依賴它。
random_shuffle
函數使用未指定的隨機性源 。 這可能是rand()
或可能完全不同; 可能是Visual Studio使用的C ++標准庫實現使用rand()
,而您在OS X上使用的實現使用的是不同的隨機性。
如果確實需要它在內部使用rand()
,則可以傳遞一元函數作為第三個參數,以告訴它如何為隨機播放生成隨機數:
random_shuffle(permutation.begin(), permutation.end(), [](int x) { return rand() % x; });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.