Time of Update: 2017-01-19
fflush用於清空緩衝流,雖然一般感覺不到,但是預設printf是緩衝輸出的。 fflush(stdout),使stdout清空,就會立刻輸出所有在緩衝區的內容。 fflush(stdout)這個例子可能不太明顯,但對stdin很明顯。 如下語句: int a,c; scanf("%d",&a); c=getchar(); 輸入: 12(斷行符號) 那麼 a=12 ,c= '\n' 而: int a,c; scanf("%d",&a); fflush(stdin); c=getchar();
Time of Update: 2017-01-19
先看下面一個例子a.c :複製代碼 代碼如下:int main(int argc, char *argv[]){ fprintf(stdout, "normal\n"); fprintf(stderr, "bad\n"); return 0;}$ ./anormalbad$ ./a > tmp 2>&1$ cat tmpbadtmp我們看到, 重新導向到一個檔案後, bad 到了 normal 的前面.原因如下:複製代碼 代碼如下:"The
Time of Update: 2017-01-19
代碼如下所示:複製代碼 代碼如下:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>#include <errno.h>#include <syslog.h>#include <stdarg.h>char **bak_argv;int flag = 0;void
Time of Update: 2017-01-19
用C++實現一個單向迴圈鏈表,從控制台輸入整型數字,儲存在單項迴圈鏈表中,實現了求鏈表大小。不足之處,還望指正! 複製代碼 代碼如下:// TestSound.cpp : 定義控制台應用程式的進入點。//實現單向迴圈鏈表#include "stdafx.h"#include <iostream>#include <string>using namespace std;//定義鏈表一個節點的結構體template <class T>struct
Time of Update: 2017-01-19
構造雙向鏈表,不足之處,還望指正! 複製代碼 代碼如下:// DoubleLinkedList.cpp : 定義控制台應用程式的進入點。//構造雙向鏈表,實現從控制台輸入,插入,刪除,求大小size等操作#include "stdafx.h"#include <iostream>using namespace std;//定義雙向鏈表的節點template<class T>struct NODE{ NODE<T>*
Time of Update: 2017-01-19
自訂一個鏈式棧,c++語言實現,不足之處,還望指正! 複製代碼 代碼如下:// MyStack.cpp : 定義控制台應用程式的進入點。//自己構造一個鏈式棧,具有push(入棧),pop(出棧),top(取得棧頂元素),size(返回棧大小),empty(判斷是否為空白)等功能#include "stdafx.h"#include <iostream>using namespace std;//構造棧的節點template <class T>struct
Time of Update: 2017-01-19
代碼如下所示:複製代碼 代碼如下:// StackToQueue.cpp : 定義控制台應用程式的進入點。//用兩個標準容器stack,實現一個隊列#include "stdafx.h"#include <iostream>#include <stack>using namespace std;template <class T>class
Time of Update: 2017-01-19
C++實現隊列,如有不足之處,還望指正複製代碼 代碼如下:// MyQueue.cpp : 定義控制台應用程式的進入點。//實現鏈式隊列(queue),包括一個頭結點。隊列操作包括在隊頭出隊(pop)、在隊尾入隊(push)、//取得隊頭元素(front_element)、取得隊尾元素(back_element)、隊列元素個數(size)、//隊列是否為空白(empty)。#include "stdafx.h"#include <iostream>using namespace
Time of Update: 2017-01-19
如有不足之處,還望指正!複製代碼 代碼如下:// BinaryTree.cpp : 定義控制台應用程式的進入點。//C++實現鏈式二叉樹,採用非遞迴的方式先序,中序,後序遍曆二叉樹#include "stdafx.h"#include<iostream>#include<string>#include <stack>using namespace std;template<class T>struct BiNode{ T
Time of Update: 2017-01-19
基數排序(Radix sort)是一種非比較型整數排序演算法,其原理是將整數按位元切割成不同的數字,然後按每個位元分別比較。由於整數也可以表達字串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用於整數。基數排序的發明可以追溯到1887年赫爾曼·何樂禮在打孔卡片製表機(Tabulation Machine)上的貢獻。它是這樣實現的: 將所有待比較數值(正整數)統一為同樣的數位長度,數位較短的數前面補零. 然後, 從最低位開始,
Time of Update: 2017-01-19
函數itoa()是將整數型轉換為c語言風格字串的函數,原型:char * itoa(int data, char*p, int num);data是傳入的帶轉化的數字,為整型變數(data的最大值為2的31次方減去1),p是傳入的字元型指標,指向儲存轉換後字串空間的首地址;num指定要轉換成幾進位的數字字串(二進位,八進位,十進位,十六進位)。如有不足之處,還望指正!!!複製代碼 代碼如下:// TestInheritance.cpp : 定義控制台應用程式的進入點。//#include
Time of Update: 2017-01-19
操作符的重載有一些規則: 1. 重載操作符必須具有一個類類型或枚舉類型運算元。這條規則強制重載操作符不能重新定義用於內建類型對象的操作符的含義。如:int operator+(int, int), 不可以 2. 為類設計重載操作符的時候,必須選擇是將操作符設定為類成員還是普通非成員函數。在某些情況下,程式沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:a.
Time of Update: 2017-01-19
奶牛生子問題描述:一隻剛出生的奶牛,第4年開始生一隻奶牛(假設只生母牛),以後每年生一隻。現在給你一隻剛出生的奶牛,求20年後有多少奶牛?自己試著寫了兩個方法,不足之處,還望指正!複製代碼 代碼如下:// CowsChildren.cpp : 定義控制台應用程式的進入點。#include "stdafx.h"#include <iostream>using namespace std;//int CalCowsNum1(int iYear){ int iCowNum = 1
Time of Update: 2017-01-19
今天專門看了一下虛繼承的東西,以前都沒怎麼用過,具體如下:父類: 複製代碼 代碼如下:class CParent { .... }; 繼承類的聲明比較特別: class CChild : virtual public CParent { .... } 請問,這個"virtual"是什麼作用及含義? ----------------
Time of Update: 2017-01-19
在C++中,不能聲明虛建構函式,但可以聲明虛解構函式。多態性是指不同的對象對同一訊息有不同的行為特性。虛函數作為運行時多態性的基礎,主要是針對對象的,而建構函式是在對象產生之前啟動並執行,因此虛建構函式是沒有意義的。解構函式的功能是在該類對象消亡之前進行一些必要的清理工作,解構函式最好都是virtual的。首先解釋一下虛構函數和指標之間是如何互動的,以及虛解構函式的具體含義。例如以下代碼,其中SomeClass是含有非virtual解構函式的一個類:SomeClass *p= new
Time of Update: 2017-01-19
我們知道,用C++開發的時候,用來做基類的類的解構函式一般都是虛函數。可是,為什麼要這樣做呢?下面用一個小例子來說明: 有下面的兩個類:複製代碼 代碼如下:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout
Time of Update: 2017-01-19
1 . 用同一個類的來源物件構造一個目標對象時,會調用拷貝建構函式來構造目標對象,如果沒有定義拷貝建構函式,將調用類的預設拷貝函數來構造目標對象。2 . 當一個函數的傳回值為一個類的對象時,如果在調用函數中,沒有定義一個對象來接收這個返回對象值,會用返回一個臨時對象儲存返回對象的值。在被調用函數結束時,這個臨時對象被銷毀。而當調用函數中有一個接受對象時,就將返回對象賦值給接收對象,這個返回對象在調用函數結束時調用解構函式。3.
Time of Update: 2017-01-19
函數 傳回值 和 返回引用 是不同的函數傳回值時會產生一個臨時變數作為函數傳回值的副本,而返回引用時不會產生值的副本,既然是引用,那引用誰呢?這個問題必須清楚,否則將無法理解返回引用到底是個什麼概念。以下是幾種引用情況:1,引用函數的參數,當然該參數也是一個引用複製代碼 代碼如下:const string &shorterString(const string &s1,const string &s2)
Time of Update: 2017-01-19
指標是C/C++語言的特色,而數組名與指標有太多的相似,甚至很多時候,數組名可以作為指標使用。但是數組名有些地方又不同於指標。這裡將數組名與指標用法的不同做一下總結(有些資料來自互連網),不妥之處,還望指正!(本文程式在WIN32平台下編譯):1、數組名和指向那個數組的指標,地址相同,但大小不同用例子來說明:複製代碼 代碼如下:#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc,
Time of Update: 2017-01-19
海量資料處理中常用到的技術 1. Bloom Filtering基本的Bloom Filtering支援快速的插入和尋找操作,是一種hash表技術。基本的資料結構非常簡單,容量為m的位元組,k個hash函數,將輸入的n個元素儲存在位元組裡面。每次插入一個新的元素,先計算該元素的k個hash指,將位元組對應hash值位置為1. 尋找某個元素時,同樣的先計算k個hash值,然後查詢看是否對應位元組中得k位是否都是1,是則斷定元素存在。基本的Bloom