寒假技術總結三

2021-08-15 20:53:21 字數 1954 閱讀 9601

讓程式設計改變世界

change the world by program

漸漸地我們發覺編寫的每乙個程式都或多或少地需要儲存一些資料,而c++在這方面只提供了幾種最基本的方法。

你可以建立區域性或全域性變數來儲存單個值,可以使用陣列來儲存多個值。

今天的概念:能容納兩個或更多個值的資料結構通常我們稱為容器(container)。

這麼說來,陣列是c++唯一直接支援的容器,但陣列並不適合用來解決所有的問題。

你打算編寫乙個簡單的拼寫檢查程式,你會腫麼做呢?

某魚油提議使用乙個相當長的單詞表,而檢查某給定單詞的拼寫是否正確就可以通過檢查它是否列在那個單詞表裡來實現:如果單詞在表裡,就說明它拼寫正確。

好滴,環顧左右,我們可以直接利用的也只有陣列這個容器可以存放乙個好長的單詞表。

但是我們好像為「只有耕不完的地,沒有累不死的牛」提供了又乙個佐證。

因為如果利用陣列來實現這個單詞表的話,我們將不得不遍歷每乙個陣列元素並把它與給定單詞進行比較。

我們不能說這種辦法不能解決問題,只是這個解決方案的效率實在是太低下了。

計算機領域的科學家們在過去的幾十年裡投入了大量的精力來為不同類別的問題尋找最合適的資料結構。

就拿剛才提到的拼寫檢查程式來說吧,最適合用來解決這類問題的資料結構是雜湊表和二叉樹。

這個話題我們會在今後的《資料結構和演算法》這系列教程中詳細講解。

這兩種資料結構以某種特殊的方式來儲存資料,在那些資料裡檢查某個特定的元素是否存在的效率是最高的。

何謂容器我們已經知曉,那麼我們如何來製作乙個容器呢?恩?啊?

其實前兩節課小甲魚已經帶大家實現一種新容器。猜的沒錯,基於模板的stack類就是一種新容器。

既然知道如何建立和使用模板,魚油們其實大可以抄起一本討論資料結構的書去嘗試實現一些自己的容器。

許多偉大的程式設計師就是花了一輩子的時間這麼做!

在此,小甲魚帶領眾魚油向前輩們敬禮!

現在的c++程式設計師用不著那麼辛苦了,我們可以坐享其成。

在c++標準庫里有許多現成的容器,它們都經過了老一輩精心的設計和測試,可以直接拿來就用,這節課,我們也是來教大家如何使用。

解決乙個問題,找到最合適的容器只是程式設計工作的一部分。還需要一些適當的函式(演算法)來處理這個容器裡的資料才能實現最優效率。

哈哈,這方面同樣有許多「標準的」功能是你經常會用到的,在《資料結構和演算法》我們將詳細講解。

陣列這種資料結構最大的先天不足就是它受限於乙個固定的長度。

在程式裡用int myarray[40]這樣的語句定義乙個陣列時,程式將遇到兩個問題:

首先,你最多只能在那個變數裡儲存40個整型資料,萬一你需要儲存第41個資料,那麼你就相當不走運了。

其次,不管程式是不是真的需要儲存40個整型資料,編譯器都會為它分配40個整型資料的空間。

像這樣的問題用c語言解決起來往往很複雜,而c++提供的解決方案就高明得多了。

c++標準庫提供的向量(vector)型別從根本上解決了陣列先天不足的問題。

就像可以建立各種不同型別的陣列一樣,我們也可以建立各種不同型別的向量。

std::vectorvectorname;

這種語法相信魚油們應該不會再感到陌生了。

我們用不著對乙個向量能容納多少個元素做出限定,因為向量可以動態地隨著你往它裡面新增元素而無線增大(前提是有足夠可用的記憶體)

然後你還可以用它的size()方法查知某給定響亮的當前長度(它當前包含的元素個數)

定義乙個向量後,我們可以用push_back()方法往它裡邊新增東西。

我們還可以用訪問陣列元素的語法來訪問某給定向量裡的各個元素。

c++標準庫是用c++編寫程式的樂趣之一,它可以讓你輕而易舉地解決許多非常複雜的問題,我們甚至不必完全了解它的內部工作情況。

c++的型別檢查功能非常強大,如果你試圖把乙個其他型別的值放到乙個字串向量裡,編譯器會立刻報錯。

把一些元素放到乙個向量裡以後,就可以用賦值操作符來改變它們的值了,就像對待陣列元素那樣:names[0] = 「jonny」;

大三寒假總結(上)

寒假已經放了六天。六天前,從武漢到深圳,中轉衡陽,廣州,十乙個小時火車,兩個小時汽車,回到家洗完澡吃過飯第一件事情就是開啟電腦,腦子裡開始迅速盤算寒假的學習計畫。對作業系統,python,linux這三塊怎麼學都很難有進步,好像就被擋在門外,永遠都只知道那麼一點點。每天下午看三個小時周志華的 機器學...

總結 寒假總結

本來說就是個10天的假期都閒的不得了呢。怎麼一下子就放了這麼久啊。大概反思一下情況吧。作息時間 大概是每天11點多一點就睡覺了,主要是我自己熬不了夜太困了 然後白天的精神還是不錯的。聽 dy 講題。收穫也不小,思路開闊了一些,而且見識到一些牛逼的思維題。然後回放看的也蠻認真的,大概屬於之前會的不用看...

技術總結 (三) Spring aop

spring aop實現對方法進行攔截的幾種方式 spring aop實現的基礎是動態 jdk 和cglib 的區別是,jdk只能 介面,而cglib 則也可以 類 這個我現在也沒有弄太明白 首先給出使用到的幾個類 1.public inte ce accountinte ce2 public cl...