2012-06-20 216 views
1

我寫這不包括和它成功運行。 是std庫中的srandrandom_shuffle? 奇怪是不是?Random_shuffle可以在沒有<algorithm>庫的情況下運行?

鏈接herehere表示它們在算法庫中。

#include <array> 
#include <time.h> 
#include <vector> 
using namespace std; 
    int main()           
    { 
     vector<int> myvector; 
     srand((unsigned)time(NULL)); 
     for (int i=0; i<10; ++i) 
      {myvector.push_back(i);} 
     random_shuffle (myvector.begin(), myvector.end()); 
    } 
+1

我的猜測是其中一個其他文件包括它(至少對於您的實現;我不會編譯任何一個調用)。嘗試編譯不包含任何頭文件的調用。 – chris

+0

特定於您的環境的東西。這裏不編譯:http://ideone.com/9meUW –

+0

傳統上,'srand()'在'stdlib.h'(或'cstdlib' for C++)中,如[here](http:/ /www.cplusplus.com/reference/clibrary/cstdlib/srand/)。你使用什麼編譯器? –

回答

9

C++沒有指定哪些標準頭文件包含在其他標準頭文件中,因此它在不同的實現中有所不同。爲了便於攜帶,您需要確保始終直接包含您正在使用的頭文件,但代碼通常會在沒有該頭文件的情況下編譯。這根本不是一般的。

+0

真實的答案一般,但我不明白它是如何解釋這個特殊的例子。我無法理解所顯示的任何包含文件將包含「」。 –

+0

@MarkRansom VS11''包括'' – bames53

+0

當然,你是對的!我想知道爲什麼我的搜索沒有找到它? –

1

許多編譯器都可以在命令行或設置中指定其他包含文件。確保你沒有自動包含這些標題。也檢查makefile。

如果程序沒有您要調用的函數的原型,C++將不會編譯該程序。

相關問題