[英]why do i need to include <vector> to use them?
我是C ++的新手,並試圖弄清楚如何使用vector
。
更具體地說,我想知道何時需要使用#include<vector>
。 我之所以這么問,是因為我看過帶有和不帶有#include
語句的程序,它們在程序中使用vector
。
當您看到使用std::vector
但未#include <vector>
代碼時 , 該代碼已損壞 。 期。
在特定的編譯器/標准庫實現/平台/行星上工作可能會“恰好發生”,具體取決於哪些其他“恰好發生”的標准頭文件已經包含了<vector>
供其自己使用。 這將不被依賴。
您可能會看到不直接 #include <vector>
代碼。 但是,如果您檢查經過預處理的代碼,我相信您會發現該代碼確實包含標頭-但通過其他標頭間接地包含了標頭。
這是脆弱的,您不應該這樣做。 但這並不意味着它不起作用。
vector
實際上不是C ++內置的,它只是其標准庫的一部分,如果您使用C ++,則保證可以使用。 vector
(或全稱std::vector
)本身是用C ++實現的。
通過編寫#include <vector>
,您將告訴編譯器不僅使用您自己的代碼,而且還編譯一個名為vector
的文件。 該文件實際上位於硬盤驅動器上的某個位置(如果使用GNU / Linux,則可能位於/usr/include/c++/[GCC_VERSION]/vector
)。
您不能在不包含該文件的情況下使用std::vector
,因為編譯器隨后不知道名為std::vector
的類。 編譯器只知道C ++ 語言 ,而不是它的標准庫!
如果某些程序使用std::vector
而不包括其頭文件,那是因為它們已經包含的某些頭文件在某處具有#include <vector>
。 這樣做可能有充分的理由(例如,某些C ++課程附帶一個包含所有必要標頭的文件,該文件在前幾節課中使用)。 但是,可能還會有包含vector
標准庫頭( iostream
某些實現會這樣做)。 依賴於它不是一個好主意,因為它在實現和實現上有所不同,因此您的程序可能在Visual C ++ 2010中工作,但是不能在GNU或Visual C ++的較新版本中編譯。
您需要包括頭文件,才能使用任何類型的數據/功能。 c ++中的所有數據類型和函數都包含在它們自己的庫中。如果不包含該庫,則c ++程序將不知道所使用的內容,因為它甚至不存在它們。
您想和吉姆的狗一起玩,但您不知道吉姆是誰,或狗是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.