1. 程式人生 > >我的STL學習反思及心路歷程

我的STL學習反思及心路歷程

到這篇就等於是STL的基礎用法介紹完了,我本來打算說就繼續寫一些STL的運用例項的。但是想了想還是寫篇自己這段時間來總結STL的一些心得吧。
說實話我這段時間並沒有做到自己說的每日一更新,但是並不是我懶,我預期的是,我可以根據《programming abstraction in C++》這本書的介紹講完STL。但是很可惜,這本書出口的方法,是放在他們學校自己的一個庫檔案裡面的。就比如他們的vector中有這樣一個方法:

vec.add(value);

但是我們STL中卻沒有提供這個方法,所以我在用vs檢視的時候,找到的是insert

vec.insert(value);

如果覺得只是個方法名字不同而已,那就錯了,他們的實現功能確實很有用,就再提一個:

vec.remove(value);

而在STL的標準庫方法中,沒有提供這個方法,這時候你可能說,那不是有eraser功能嗎?是的,我們也有擦除工具,但是很可惜,我們並不能說直接這樣方便使用,這個時候這得這樣:

vec.erase(value); // 錯誤使用
vec.erase(vec.begin() + 1); //正確使用

這個時候,我是問谷老師(Google)得知的用法,然後這裡就產生了一個問題,vec.begin()返回的肯定不是一個數值,不然第一種方法不可能不行。深入瞭解後才知道這個東西叫迭代器(iterator)一個類似於指標的東西(或者說就是指標)。至此,這就是第一個全新的概念出現在我的面前

繼續往下,我在寫set的時候,我就顯得沒那麼自信了,畢竟發現太多東西還不是很熟悉,不怎麼敢寫。但我還是繼續寫了,在我寫set集合的時候,在《programming abstraction in C++》這本書中,提供了一些運算,比如說求集合的交 並 補(當然我覺得集合類裡面沒有定義這些運算確實是讓我沒想到的),很可惜STL中出口的方法它就是沒有啊。但是我不甘心,因為如果沒有這些功能那麼我們要一個集合的功能也就沒什麼意義所在了。所以我繼續問谷老師。果然,我在這個時間裡再次發現了C++庫的強大之處,< algorithm >庫,對的就是演算法庫,一個全新的庫出現在我的面前,但是我很興奮,因為首先這個庫讓我可以更方便的處理一些資料跟字串

舉個例子:

    cout << "順序排序" << endl; 
    sort(vec.begin(), vec.end());
    outputValue(vec);
    cout << "逆序排序" << endl; 
    reverse(vec.begin(),vec.end());
    outputValue(vec);

短短的幾行程式碼就可以幫我們把我們之前要寫的一堆排序程式碼完成,大大的提高了我們的效率。是不是算找到了寶呢?確實是,但是作為一個計算機專業的學生,我們不是為程式碼打工的,也不是搬運工,我們是程式碼的生產者,所以這讓我興奮的第二個原因就是,我可以通過網站去檢視這些方法的實現,比如這個sort方法,它是怎麼實現的,為什麼要有這些引數,很幸運很多網站就有這幾個的解釋,而且我相信,能寫進標準庫的方法,都是高質量的程式碼,這些作者都是一個個頂尖的programmer。我必須由心底裡感到敬佩。所以我接下來就準備寫這個庫STL在裡面的運用。

最後一個總結的是map集合吧,這裡我再次碰壁,在最簡單的初始化中,我們可以用C++標準中,使用引數化的列表,也可以採用第二種方法:

my_map.insert({'f', 6}); //使用引數化的列表
my_map.insert(MapType::value_type('d', 4)); //用第二種方法

可能有人覺得吧,第一種方法不是挺好的嗎?而且簡短,為什麼我們就關注第二種呢?沒錯確實是,我一開始也是這樣子想的,但是當我看到了很多標準的程式都用這個方法時,而且這裡有個特別的註釋我不得不關注一下:所有的STL容器都支援這個功能;所以我知道這個知識肯定是個寶(事實上,STL中的各個容器初始化也是很多,就得要規範一下了)。當我準備去深入瞭解的時候,發現了一個C++的關鍵字 typedef,這又是個新面孔。所以新知識不斷呈現在我面前,讓我措手不及。

在這裡,我並不是說《programming abstraction in C++》這本書不好,相反我一直覺得是教材中的經典。它提供的方法雖然不能直接使用,但是我們完全可以通過我們的知識把它實現。給我們提供了很多思路。而且後面的知識更是讓我拍案叫絕。這以後再說。

總結

在學習STL的過程中,我有收穫,也有迷茫,中國有句古話:學無止境。我想這次我是深刻體會到了。當我覺得我解決了一個問題後,新的問題就出來了,我感覺就是我是學的越多,知道的越多,瞭解得越多,就意識到自己,學的太少,知道的太少,瞭解的太少。這也許就是我們學習前進的動力吧。
接來下的STL實戰系列,我就把這段時間學習的新知識寫上,希望有大神看到指正 。
下面附上兩個實用的網址:
微軟的VS庫中的解析(官方)https://msdn.microsoft.com/en-us/library/cscc687y.aspx
C++標準庫的解析http://www.cplusplus.com/reference/

PS:這些網址都是國外的,全英文,所以英文對於我們還是很重要的。國內的網址我目前沒看到有這麼權威跟詳細的。

相關推薦

STL學習反思心路歷程

到這篇就等於是STL的基礎用法介紹完了,我本來打算說就繼續寫一些STL的運用例項的。但是想了想還是寫篇自己這段時間來總結STL的一些心得吧。 說實話我這段時間並沒有做到自己說的每日一更新,但是並不是我懶,我預期的是,我可以根據《programming abst

學習JS的心路歷程-宣告

變數 在程式中將一個值指定(assign)給一個符號式的容器(symbolic container),叫做一個變數(variable)。   宣告在JS中目前提供了三種宣告方式:   var 宣告一個變數,可選擇是否給予一個初始值。   作用範圍(scope)於該

學習JS的心路歷程-聲明

functions missing 輸出結果 我們 total initial ret err htm 變量 在程序中將一個值指定(assign)給一個符號式的容器(symbolic container),叫做一個變量(variable)。 聲明在JS中目前提供了三種聲

學習JS的心路歷程-範圍Scope和提升(Hoisting)

在上一篇提到了JS有三種宣告變數的方式,分別是var、const及let,var和const let最大區別就是範圍(scope)的限制。所以在這一篇我們會詳談何謂範圍鏈及他們的複寫優先順序。   範圍Scope 我們先來看一個例子:   var globalVar = 'glo

學習JS的心路歷程-引數的傳遞(下)

今天我們要來探討JS到底是透過何種引數傳遞方式呢?   廢話不多說,上示例!!   我們先宣告原始型別和物件型別來看看兩者是否會有不一樣的差異:   var myStr = 'Hola'; var myObj = {name:'Ann'}; 再來,宣告另一個變數去

學習JS的心路歷程-參數的傳遞(下)

ole 自己 語言 什麽 開始 初學者 做的 console mas 今天我們要來探討JS到底是透過何種參數傳遞方式呢? 廢話不多說,上示例!! 我們先聲明原始型別和物件型別來看看兩者是否會有不一樣的差異: var myStr = ‘Hola‘; var myO

學習JS的心路歷程-函式(一)

前幾天有間單提到該如何宣告函式及在Hositing中會發生什麼事,但是函式的奧妙不僅於此。   身為一個使用JS的工程師,我們一定要熟悉函式到比戀人還熟!   這幾天將會把函式逐一扒開跟各位一起探討其中的奧妙。   函式是頭等物件 這句話代表著函式與任何JS物件共存

學習js的心路歷程

while/do while while、do while主要的功能是,當滿足while後邊所跟的條件時,來執行相關業務。這兩個的區別是,while會先判斷是否滿足條件,然後再去執行花括號裡面的任務,而do while則是先執行一次花括號中的任務,再去執行while條件,

工科轉機器學習的一些心路歷程

沒有目錄哦,大家就當看一個日記好了,後面我會整理一下我轉行學習的資料和過程還有面試的公司和題目。 到今天為止,我的秋招算基本結束了,我不算是大神,一路走來磕磕碰碰,只能說不辜負自己的努力,一共7個月,轉行到找到工作。從9月份找工作到現在一路走過很多坎坷,有過笑容

寫點學習javaweb的點滴歷程原來是學.net的)

今年因為專案需要,開始學習myeclipse了,雖然有幾年的net學習經驗,學習起來感覺,java和.net差別挺大,從建立myeclipse開發環境;安裝myeclipse;安裝apache;安裝tomcat;用myeclipse建立第一個javaweb專案;第一個jav

在慧翔天地學習PMP的心路歷程

2015年我參加PMP9月份考試,現回顧幾個月來學習PMP的心路歷程,是一個美妙的過程,辛苦與喜悅都嚐到了。總結經驗以作為組織過程資產吧。 PMP學習有祕訣嗎? 要說有,那必定是建立在兩個基本條件上的:時間和心態。否則,任何祕訣都無效。 PMP考試本身不難,足夠的時間加良好

學習前端開發,一段心路歷程,這個世界根本沒有速成的方法

前端 前端工程師 前端學習 前端開發在已經成功的為大家講解了很多篇有關前端開發的技術文章之後,想跟每一位前端開發人員談一談學習前端開發的一些心得。本篇文章我就來給大家說一說我在學習前端開發過程中的一些經驗,我把它們總結成了十條警言,希望能夠對你的學習帶來一些小的幫助。我是一個做web端開發十年的老師,主要

vue2學習仿qq音樂的心路歷程

隨著網際網路的高速發展,技術不斷的更新迭代,web這一領域技術發展更是快的不行,幾年前風靡全球的jQuery,現在看來也遇到了瓶頸,現在web更是講究框架模組化開發,react/vue/angular等框架就是這web發展所需的時代產物,好了,感慨就到這裡吧。。。。。。第一次發博,算是學習之路的一個

計算機指令碼語言學習和使用的心路歷程

  很多教訓,都要經歷血和淚的教育才能夠領悟。記得剛入職的時候,一位老員工經常這樣說,凡是能夠用計算機做的事情堅決不用手工,否則就是浪費生命。可是,那時是剛入職的菜鳥,哪懂得什麼指令碼語言啊。甭說什麼使用指令碼去處理日常事務了。   後來,跟著一位經驗豐富的老員工,才發現指令碼的威力是那麼的大,別人編譯一個

面試web前端工程師的兩個星期的心路歷程面試題分享

    博主畢業接近3年半了,年初公司進行了一次業務調整,hr小姐姐明裡暗裡讓我們自動滾蛋,但是我牛脾氣上來了你不說可能我自己會走,你這一說我偏不走了,於是乎,生生熬到9月份。。。     9月中旬開始改簡歷,投遞簡歷。。。小姐姐我並不是大神,簡簡單單的一個小前端,主要做官網型別的開發,主要使用html,cs

寫點什麽...記錄一下學習過程中的心路歷程

方法 展開 這不 這才 遊戲視頻 畫面 思維 相互 摩擦   講真"好腦子比不上爛筆頭"這句話讓我產生了深深的認同感...   Python自學已經一個多月了,天天在視頻,書本的連環轟炸下,稀裏糊塗的記住了不少的東西,擺脫了看代碼兩眼一抹黑的尷尬境遇.各種結構驚奇的代碼

【兄弟連_戰地日記】職場如戰場,戰場需要軍人,而職場需要的是職業人!戰地日記是展現LAMP兄弟連新兵(學生、社會人)轉變為合格軍人(職業人)的心路歷程,記錄連隊(學習)生活的點點滴滴,分享其中的收穫與快樂!提升職業競爭力

職場如戰場,戰場需要軍人,而職場需要的是職業人!戰地日記是展現LAMP兄弟連新兵(學生、社會人)轉變為合格軍人(職業人)的心路歷程,記錄連隊(學習)生活的點點滴滴,分享其中的收穫與快樂!提升職業競爭力...

在51CTO微職位學軟考--系統架構設計師學習感想個人通關經驗

系統架構設計師高階資格考試一直是我近幾年需要通過的一個證書,它不僅是一個證書,更重要的是經過多年的工作經驗後,系統的梳理一下基礎知識,因為IT系統不管怎麼發展,框架不斷推陳出新,這些基礎知識是基本不變的,所以我個人挺認可軟考的知識框架。 第一次考試,通過網上購買的視訊,說實在的沒有看的動力和緊迫感,所以第一

關於後臺需要掌握的知識技能學習經驗

對於一名剛畢業的學生來說,工程或者專案都是比較陌生的,但是為了生活,只能讓自己更好的去適應這個社會。 進入社會第一份工作便是做後臺,給app做後臺介面,下面說下做後臺需要具備的一些知識,個人認為需要掌握的知識。新人只是個人觀點。 首先,html要很熟悉,我現在只是剛剛入門,

的程式設計師之路:11 年高考結束到 17 年日本修士的心路歷程

前言 友情提示,本文共 6970 字,請耐心閱讀閱讀。借這個機會可以舒展心中的話,很開心。希望大學新生看到我的經歷能從中學習到經驗與教訓。本文是作者多年總結經驗和心得,從大學教育對比,大學學習歷程,考研價效比高的學校推薦,海外留學經驗,技術積累,編碼學