2009-02-14 39 views

回答

36

STL有一些核心概念。 Boost構建並擴展它們。如果你瞭解它們,那麼直接轉到Boost可能對你有用。如果不是,我會從STL開始。

  • 各種容器類型之間的區別(序列等vectorlistdeque,和類似mapset及其multi*unordered_*品種關聯)。有時你可以換另一個 - 有時你不能。瞭解他們的優點和侷限性。
  • 迭代器的作用,以及它們如何提供容器和算法之間的橋樑。 (這一個我發現我反覆使用)。
  • 爲什麼有標準算法:它們通常只有很少量的代碼,所以它們存在的原因可能並不明顯。瞭解他們使用哪些容器,以及如何針對特定情況對它們進行專門化(例如,請參閱通用copy與專用於const char *copy不同)。
  • 如何以及何時使用traits類。
  • 如何使用活頁夾(bind1st,ptr_funmem_fun):該語法可能會掩蓋其實用程序。
  • 如何使用string - 當使用它。 (所有字符串類都有權衡:學習標準教育的利弊是教育性的)。
  • 流和streambufs之間的區別:如何使用前者來進行格式化I/O(嘗試從流中讀取字符串:它不像應該那樣直截了當),後者要做低級別I/O。

用於設計STL的原理是建立在Boost庫的基礎之上的,並且被Boost庫擴展。如果你得到它們,Boost是可管理的。如果你不這樣做,並且Boost最終難以遵循,你可以回到STL來獲得你的方位。如果你決定真的想把你自己的C++知識,並測試你是否真的知道你的想法,那麼它可以提供一個有趣的挑戰。已經使用了C++十幾年了,已經教會了其他人如何使用它,從那時起已經熟練掌握了更多的高級語言,Boost仍然讓我感到驚訝。它非常有用,但它不是微不足道的)

1

這完全取決於您是否能夠在所有工作中使用Boost。我不懷疑會有會禁止使用它的工作場所(不過看起來很愚蠢)。

但是,如果你認爲你可以在任何地方使用它,那麼一定要集中精力。

如果有STL提供的功能但不提升,請專心學習STL的這些位。

+1

有確實的地方,禁止(或使其不可能使用)助推和其他開源庫。儘管源代碼可用,但一些商店(政府,咳嗽,咳嗽)認爲使用開源軟件存在安全風險。它真的很糟糕。 – 2009-02-14 18:02:29

0

首先和STL一起去,因爲那是大多數時候你會用到的東西。掌握所有的提升是非常困難的,檢查任何圖書館,不提供與c + +開箱即用。解析庫,圖庫

+3

你不必爲了使用它而掌握所有的提升。 – 2009-02-14 10:53:10

9

我建議在查看Boost之前獲得STL的清晰句柄。 Boost旨在建立在STL之上,並且許多庫將最終成爲標準庫的一部分。 Boost庫通常不如STL成熟和標準化。另外,在我看來,許多boost庫過於頻繁,添加了本來不存在於C++中的「特性」(導致真正瘋狂的語法)。在很多情況下,有更多理智的C++習慣用於解決大多數編程問題,而無需使用這些神祕的Boost庫。

+2

出於好奇 - 你能舉出一些更「理智」(便攜式)C++習語存在的「許多案例」嗎?我只使用了Boost庫的一個子集,但還沒有真正發現這種情況。 – Reunanen 2009-02-14 22:48:36

2

我會先學習STL。一旦你通過C++的基礎知識,學習如何使用STL的部分,然後如何工作將比解決Boost更好。 Boost庫傾向於推動C++的邊緣,特別是在高度模板化的函數的組合中。

我喜歡馬特奧斯汀的泛型編程和STL,你可以便宜地皮卡secondhand

5

我認爲從一開始就可以直接使用它。 Boost提供了許多強大的功能,被廣泛使用,並擁有良好的聲譽。它提供的大部分功能都與STL設計的共同編程概念相同,所以在這個意義上它不應該讓人感到困惑。

學習東西的最佳方式是使用優秀的代碼,然後去看看它是如何寫的。這對Boost來說效果很好。閱讀模板教程,您從一小時內發現的新動力中受到啓發。然後閱讀你已經使用了一點的Boost標題,並且你會被激勵數週。

當然,不要期望立刻理解那些內部 - 起初我只是用庫而無需瞭解一下如何去建立任何的是,這很好。但是在某個時候,你意識到你想用類似的設計寫一些東西,然後你會去看。

如果你想做相反的事情,並限制自己使用「C++作爲一個更安全的C」,那麼你就不會接觸到所有這些強大的東西,所以你不會想要去看待和理解它們,所以你會寫出相當原始的代碼並學得更慢。

編輯:忘了我有另一個想法 - 看看即將到來的C++ 0x標準了。它融合了許多起源於Boost的功能。也就是說,誰開始學習C++的學生從現在開始幾年將這些概念從合作一開始 - 你不妨做,今天太...

1

通過編程學習和使用的工具最適合。如果你編程的東西需要大量的解析,那麼你可能會學到一些提升的精神,但是在你到達那裏之前,你還會學到關於std :: string和std :: fstream的東西。你寫的下一個應用程序可能需要std :: vectors和boost :: accumulators。

只要記住提升是巨大的,你會你甚至用它的四分之一(我個人不希望永遠使用或學習最刺激的,因爲我不需要之前良好的品質程序員方式它...)。

1

先學習STL。如果你從一開始就用Boost學習C++,那麼你將很難在未使用Boost的工作中(因爲許可原因等)很難。首先了解語言標準,然後如果您需要某些功能,則可以使用Boost進行擴展。

4

最終,你應該學習兩者。但是STL可以被孤立地學習,而boost直到你理解STL纔會有意義,因爲這是Boost所建立的,並且被設計用來擴展。所以學習使用STL作爲學習C++的一部分。然後你可以轉向Boost,這幾乎是「第二個標準庫」。