STL vector實現(一)

  作者放棄對本文的任何權利。任何人都有權轉載,修改,分發。轉載請註明出處。作者對本文不承擔任何責任。  假定你現在已經能熟練使用vector,如果你很好奇vector背後是怎麼實現的,那麼本文或許對你能有所協助。  vector代表了c++的動態數組,大小是動態可增長的。你不必考慮自己手動分配或釋放記憶體,也不必擔心記憶體流失,vector幫你做了這一切。vector的使用很簡單,但是要做到有效率,沒那麼容易,瞭解他背後的實現原理能協助達到這一目的。  言歸正傳。本文基於SGI

鏈表的逆序實現

題目:輸入一個鏈表的頭結點,反轉該鏈表。鏈表結點定義如下:struct ListNode{      void*       m_nKey;      ListNode* m_pNext;};常規實現,需要兩個臨時節點: ListNode* ReverseIteratively(ListNode* pHead){      ListNode* pReversedHead = NULL;      ListNode* pNode = pHead;      ListNode*

什麼時候該使用前置聲明?

首先,我們為什麼要包括標頭檔?問題的回答很簡單,通常是我們需要獲得某個類型的定義(definition)。那麼接下來的問題就是,在什麼情況下我們才需要類型的定義,在什麼情況下我們只需要聲明就足夠了?問題的回答是當我們需要知道這個類型的大小或者需要知道它的函數簽名的時候,我們就需要獲得它的定義。假設我們有類型A和類型C,在哪些情況下在A需要C的定義:A繼承至CA有一個類型為C的成員變數A有一個類型為C的指標的成員變數A有一個類型為C的引用的成員變數A有一個類型為std::list<C>

整數溢出,如何判斷整數溢出

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢出的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的一個運算元是有符號書,另一個是無符號數,那麼有符號數會被轉換為無符號數(表示範圍小的總是被轉換為表示範圍大的),那麼溢出也不會發生。但是,當兩個運算元都是有符號數時,溢出就有可能發生。而且溢出的結果是未定義的。當一個運算的結果發生溢出時,任何假設都是不安全的。 例如,假定a和b是兩個非負的整型變數(有符號),我們需要檢查a+b是否溢出,

ShellExecute()用法以及和system()的區別

ShellExecute Functionshell32.dll  ShellExecutePRE.clsCode { font-size:110%; }PRE.clsSyntax { font-size:100%; }TD DIV.clsBeta { display:none;}A:link { color:#0000ff; text-decoration:underline;}A:visited { color:#0000ff;

DLLs And Exes

Running the Executable ModuleWhen an executable file is invoked, the operating system loader creates the virtual address space for the process.Then the loader maps the executable module into the process' address space. The loader examines the

CWinThread類,以及和createthread API的區別

 CWinThreadCObject  └CCmdTarget     └CWinThread CWinThread對象代表在一個應用程式內啟動並執行線程。啟動並執行主線程通常由CWinApp的衍生類別提供;CWinApp由CWinThread派生。另外,CWinThread對象允許一給定的應用程式擁有多個線程。CWinThread支援兩種線程類型:工作者線程(Worker Thread)和使用介面執行緒(UI

寫給剛畢業的程式員的建議

我個人覺得比較重要的地方:1. 學會把事情做好的能力。leader交給你一個任務,你做完後,一定要自己check自己做的對不對。    check好之後再說自己做好了,做好和做完是有很大區別的。剛畢業的程式員,做完10件事情,    如果不仔細check的話,會有8件是錯的。    把事情做好,是真的做好,是擷取leader信任的關鍵。如果你的leader對你缺乏信任,那你的前途    將會受到很大的影響。2. 關於自我學習下了班之後,多看點技術方面的書籍,提高自己知識面的深度和廣度。冰凍三尺,

一個ini檔案讀寫類的設計和實現

前言:        決定自己寫一個ini讀寫類,希望對大家能有所協助。       如有朋友發現問題,請務必致信bicheng.gui@gmail.com 1. 什麼是ini檔案?    ni 檔案是文字檔,中間的資料格式一般為:   [Section1 Name]   KeyName1=value1   KeyName2=value2   ...   [Section2 Name]   KeyName1=value1   KeyName2=value2   ini 檔案可以分為很多個

GPRS DTU概念及DTU的工作原理

 最近需要開發一個基於GRPS DTU資料轉送的資料中心方案,於是找了一些資料。個人覺得很有用。 GPRS DTU全稱GPRS數據傳輸單元,在國內目前實際上對GPRS DTU具有更加明確的約定:GPRS DTU是專門用於將串口資料通過GPRS 網路進行傳送的GPRS無線裝置。GPRS DTU的四個核心功能:    1)內部整合TCP/IP協議棧:GPRS DTU內部封裝了PPP撥號協議以及TCP/IP協議棧並且具有嵌入式作業系統,從硬體上,它可看作是嵌入式PC與無線GPRS

關於dynamic_cast傳回值的判斷

很遺憾的,因為dynamic_cast傳回值沒有做檢查,導致了一個小bug。又杯具了一回。因為我工作中很大一部分任務是調試和修改別人的bug,修改自己因為小紕漏造成的bug,是很打擊自己的一件事情。 dynamic_cast傳回值有可能為null,切忌切忌!切忌任何指標在使用之前都做NULL判斷。 記得boost裡麵包裝了一下,有一個polymorphic_cast,該函數封裝了一下dynamic_cast, 當不能轉換的時候返回的是異常,而不是null 指標。也許以後考慮換一個轉換函式了?

DLL中GDIPlus初始化和退出時注意的問題

轉載的別人的文章,因為自己也在實際工程中遇到類似的問題。DLL工程中使用GDIPlus2009-08-04 14:51前段時間項目的需求有所更改,因此我將工程中部分GDI改為了GDI+,主要是為了增加圖片格式的支援,沒時間看東西了,而因為我以前對於GDI+比較熟,所以就直接用GDI+了。一開始在幾個工程的Dllmain中添加Gdiplus的GdiplusStartup和GdiplusShutdown,不過發現在產生時

開源zlib庫使用心得

前篇:最近在做的一個項目中需要用到資料轉送,為了節省流量,需要對傳輸的資料進行壓縮。由於之前對這方面不是太瞭解,在網上搜尋了下,決定使用大名鼎鼎的zlib庫。:http://www.zlib.net/    最新的版本為1.2.7下載後的檔案解壓縮有,是一個原始碼包,需要重新編譯才能使用。博主的開發環境用的是VS2010.編譯過程如下:開啟VS2010的Command Prompt (32bit): 開啟方式: 開始菜單->vs2010->Visual Studio

單例模式(定製一個計時器)

在面試的時候,面試官提到了單例模式。我沒有接觸過,但也瞭解。這讓面試官對我的影響有所失望,回來之後就買了《設計模式-可複用物件導向軟體的基礎》。翻開單例模式,發現用C++實現的單例模式還真的有點水平。單例模式指在我們的程式中有一個組件,它的類只有唯一的一個對象,也不可以建立更多的對象。這種模式就是單例模式。實現如下:上面的單例模式的實現要求我們如下方式使用類Singletonclass Singleton{public:static Singleton* Instance(); void

關於Crystal Reports在64位機器上的運行時問題。

有時候會hang住。進程掛起了。 Crystal Reports預設是不支援64位系統的,因為官方從來沒有說明過。因此為瞭解決這個問題,需要安裝一個針對64位的專門的補丁包。 :

保護模式和實模式的區別

   實模式:定址採用和8086相同的16位段和位移量,最大定址空間1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。  保護模式:定址採用32位段和位移量,最大定址空間4GB,最大分段4GB (Pentium

多線程同步-event

   在所有的核心對象中,事件核心對象是個最基本的。它包含一個使用計數(與所有核心對象一樣),一個BOOL值(用於指明該事件是個自動重設的事件還是一個人工重設的事件),還有一個BOOL值(用於指明該事件處於已通知狀態還是未通知狀態)。事件能夠通知一個線程的操作已經完成。有兩種類型的事件對象。一種是人工重設事件,另一種是自動重設事件。他們不同的地方在於:當人工重設的事件得到通知時,等待該事件的所有線程均變為可調度線程。當一個自動重設的事件得到通知時,等待該事件的線程中只有一個線程變為可調度線程。 

不要相信open( ) 已經為你做好準備工作

void Database<T>::add(T& t){ //每次向檔案中寫入相關人員的資料,以二進位形式儲存,每次追加到檔案的末尾加入資料 database.open(fName, ios::out | ios::binary | ios::app ); if(!database) {  cout<<"can't open file !"<<endl;  return; } database.seekp(0,ios::end);// istream 

如何帶新員工

 帶一個新的團隊還是挺操心的。一個字:累。但面對一張張白紙,做為主管還是有責任把他們帶好的。在帶新人的過程中,我的最大感受是緊湊檢查點,隨時溝通。說個例子:    一個新策劃,沒有太多經驗,加入了我的Team

設計模式之單例模式(singleton模式)

筆者工作中第一次遇到的模式就是單例模式了,單例模式簡單好用,但是極容易被濫用,尤其在小型系統中。WIKI是這麼解釋單例模式的,我個人覺得很精確。單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證只有一個執行個體存在。許多時候整個系統只需要擁有一個的全域對象,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在一個檔案中,這些配置資料由一個單例對象統一讀取,然後服務進程中的其他對象再通過這個單例對象擷取這些配置資訊。這種方式簡化了

總頁數: 61357 1 .... 13342 13343 13344 13345 13346 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.