Time of Update: 2018-12-04
位元運算C語言中的位元運算包括與(&),或(|),亦或(^),非(~).下面的程式碼封裝擴了這些基本運算,還有一個兩個數的交換(不用第三個數)。#include<stdio.h>#include<stdlib.h>//print a int in binaryvoid bit_print(int a){ int i; int n=16; int mask = 1 << (n-1); for(i = 1; i <= n; ++i) {
Time of Update: 2018-12-04
最近發現一個挺有意思的東西,一問一答-http://wenda60.com/。我這水平也就敢沖一下C++了,下面是一些記錄。預設this指標this指標是一個特殊的指標,當類的某個非靜態成員函數在執行時,就會存在this指標。它指向類的一個對象,且這個對象的某個成員函數正在被調用。this指標的名字始終是this,而且總是作為隱含參數傳遞給每一個被聲明的成員函數。實際編程時函數的聲明不需要包含這個參數。當程式中調用某個對象的成員函數時,編譯器會把該對象的地址加入到參數列表中。靜態成員函數不存在t
Time of Update: 2018-12-04
大家都知道在c語言的運行過程中,局部變數都是存放在棧中的,且是從高位到低位進行進行空間分配。但是最近遇到一個程式還是讓我有點小困惑。先看一個程式。很明顯,地址從高到低分配,和預計的一樣。稍微修改一下,再運行。很明顯,從低位到高位!!!明確一下問題:棧區會應為局部變數的占記憶體的大小更改記憶體的分配方式。為什嗎?為什嗎?為什嗎?用-S產生組合語言看一下第一種情況的組合語言.file"main.c".section.rodata.LC0:.string"Address s = Ox%x\n".LC1
Time of Update: 2018-12-04
紅/黑樹狀結構的定義:一棵二叉尋找樹如果滿足下面的紅黑性質,則為一棵紅/黑樹狀結構:1)每個節點或是紅的,或是黑的。2)根節點是黑的。3)每個分葉節點(NIL)是黑節點。4)如果一個節點是紅的,則它的兩個兒子都是黑的。5)對每個節點,從該節點到其子孫節點的所有路徑上包含相同節點數目的黑節點。C++代碼實現:BRTreeNode.h#ifndef BRTREENODE_H_INCLUDED#define
Time of Update: 2018-12-04
首先說明一下,聲明和定義是兩個不同的概念,一個比較大的區別就是聲明不分配空間,而定義分配。 現在來討論一下關於定義指標是否為其分配記憶體的問題。能夠確定的是定義數組的時候是分配給它空間的。首先看下面的程式;#include<stdio.h>main(){ int *i; *i=1; printf("%d/n",*i);} 程式直接崩掉了,看來定義一個指標是不為其分配空間的。那再看一個程式#include<stdio.h>main(){ int *i; printf(
Time of Update: 2018-12-04
第三章主要說了string類和vector容器。1.string類的輸入操作:.讀取並忽略開頭所有的空白字元(空格,換行,製表);.讀取字元直至再次遇到空白字元,讀取終止,如:string s1,s2;cin>>s1>>s2;cout<<s1<<s2<<endl;輸入“ Hello World ”輸出將是
Time of Update: 2018-12-04
這一章主要介紹了c++中的基礎資料型別 (Elementary Data Type),還有一些編程的技巧。記錄有如下幾點:1.通過增加尾碼,能夠強制將字面值整數常量轉換為long或unsigned,unsigned long類型,如1L
Time of Update: 2018-12-04
繼續刷水題!!!這次要搞zoj的題目,Let's go!Quicksumhttp://acm.zju.edu.cn/網上第 2812 題Quicksum 是一行字串(資料包)中每個字元的位置與該字元的值的乘積之和。空格的值是 0,字母的值等於它在字母表中的位置。所以,A 的值是 1,B 的值是 2,依此類推,Z 的值是 26。下面兩個例子是求“ACM”和“MID CENTRAL”的 Quicksum:ACM: 1*1 + 2*3 + 3*13 = 46MID CENTRAL: 1*13 + 2*
Time of Update: 2018-12-04
先看昨天的成果:勉強衝進前50.今天花點時間做一些ACM的水題。1.菲波那且數列菲波那契(Fibonacci)數(簡稱菲氏數)定義為:⎧ f (0) = 0⎪⎨ f (1) = 1⎪ f (n) = f (n − 1) + f (n − 2) (n > 1且n ∈ 整數)⎩如果寫出菲氏數列,則應該是:0 1 1 2 3 5 8 13 21 34 ...如果求其第 6 項,則應為 8。求第 n 項菲氏數。輸入描述:輸入資料含有不多於 50 個的正整數 n(0≤n≤46)。輸出描述:對於每個
Time of Update: 2018-12-04
繼續幹!List the Bookshttp://acm.zju.edu.cn/網上第 2727 題以書名、出版年份和價格為關鍵詞,按照排序標準把書進行排序。注意:Name 是第一排序標準,Year 是第二排序標準,Price 是第三排序標準。思路:定義書的結構體,首先把書的資訊讀到vector中,然後分別定義三個Compare方法。#include <iostream>#include <fstream>#include <string>#include &
Time of Update: 2018-12-04
今天通過Fibonacci數列的實現方式來說明一下C語言中迭代和遞迴的效率問題。首先來看斐波那契函數 的定義,Fibonacci(n)={1;n<=2; Fibonacci(n-1)+Fibonacci(n-2);n>2;遞迴演算法如下:Fibonacci(int n){ if(n<=2) return 1; return
Time of Update: 2018-12-04
泛型程式設計與物件導向編程一樣,都依賴於某種形式的多態性。物件導向編程所依賴的多態性稱為運行時多態性,泛型程式設計所依賴的多態性稱為編譯時間多態性或者參數式多態性。在泛型程式設計中,我們所編寫的類和函數都能多態地用於跨越編譯時間不相關的類型,一個類或者一個函數可以用來操縱多種類型的對象。標準庫中的容器、迭代器和演算法是很好的泛型程式設計的例子。模板是泛型程式設計的基礎。模板函數的例子首先來看一段用於比較大小的代碼。#include<iostream>using namespace
Time of Update: 2018-12-04
首先來看一下今天的成績:雖然沒到三百,但是還是有進步。今天的目標是350。繼續記錄一下C++裡遇到的盲點。靜態成員分為待用資料成員和靜態函數成員。待用資料成員實際上是類域中的全域變數。所以,待用資料成員的定義(初始化)不應該被放在標頭檔中。 待用資料成員被 類 的所有對象所共用,包括該類衍生類別的對象。即衍生類別對象與基類對象共用基類的待用資料成員。待用資料成員可以成為成員函數的選擇性參數,而普通資料成員則不可以。靜態成員函數的地址可用普通函數指標儲存,而普通成員函數地址需要用
Time of Update: 2018-12-04
現代C++程式應盡量使用vector和迭代器類型,而盡量避免使用低級的數組和指標。設計良好的程式只有在強調速度是才在類實現的內部使用數組和指標.聲明一個指標後一定記得初始化,沒地方指就初始化為0.void*可以儲存人格類型對象的地址。指標和引用的比較:相同:間接訪問另一個值。不同:1)引用總是指向某個特定對象,定義時就得初始化;2)賦值行為的差異:引用始終指向一特定對象,給引用賦值修改的是該引用所關聯的值。指向const對象的指標:const double
Time of Update: 2018-12-04
在求模或取餘中如果有一個運算元是負數,這兩種操作的結果取決於機器。若僅靠左運算元的值無法確定該邏輯運算式的結果,才會求解其右運算元的值-短路求值。關係操作符具有左結合性,如if(i<j<k),即將k與整數1或0做比較。移位操作的右運算元不可以是負數,而且必須是嚴格小於左運算元位元的值。bitset的用法: 作用:方便地管理一系列的bit位而不用程式員自己來寫代碼。初始化方法:bitset<N>varm (M)其中varm為變數名。N表示該類型在記憶體中占的位元,是二進位。
Time of Update: 2018-12-04
順序容器:vector: 支援快速隨機訪問;list:支援快速插入/刪除,類似與鏈表deque:爽端隊列。使用預設建構函式能達到最佳運行時效能,並使容器更易使用。將一個容器初始化為另一個容器的副本:vector<int> ivec;vecror<int>
Time of Update: 2018-12-04
Regex(Regular Expressions),又被稱為regex或regexp,是一種十分簡便、靈活的文本處理工具。它可以用來精確地找出某文本中匹配某種指定規則的內容。 關於Regex的教程,可以參考這裡。 在C/C++中常用的Regex庫有GNU Regex Library, Boost.Regex, PCRE, PCRE++。這四個庫中,後面兩個是有關係,其它都是各自己獨立的,是不同的實現。今天主要用GNU Regex Library。
Time of Update: 2018-12-04
使用空語句時應該加上注釋,加強代碼可讀性; 在switch語句中,哪怕沒有語句要在default標號下執行,定義default標號還是非常有用的。定義default標號是為了告訴讀者這種情況已經考慮到了,只是沒有什麼要執行的。 在switch語句中,只能在最後一個case語句或是default語句中定義變數。如需要為某個特殊的case定義變數,則可以引入塊語句。 break語句用結束最近的迴圈或swith結構中,並將程式的執行權傳遞給緊接在被終止語句之後的語句; continue導致最近的迴圈
Time of Update: 2018-12-04
將關鍵字const加在形參表之後,就可以將成員函式宣告為常量,const成員不能改變其所操作的對象的資料成員,const必須同時出現在聲明和定義中.資料抽象和封裝的兩個重要優點:1)避免類內部出現無意的,可能破壞對象狀態的使用者級錯誤。2)隨時間推移可以根據需求改變或缺陷報告來完善類實現而無需改變使用者級代碼。建構函式初始化式初始化列表Sales_item::Sales_item(const string &book):isbn(book),units_sold,revenue(0.0)
Time of Update: 2018-12-04
不適宜複製實參的情況:1)當需要在函數中修改實參的值時;2)當需要以大型的對象作為實參時;3)當沒有辦法實現對象複製時; 使用引用形參返回額外的資訊#include <iostream>#include <vector>using namespace std;//函數說明:找出範圍內特定的值出現的次數,並返回第一次出現的迭代器vector<int>::const_iterator