Time of Update: 2017-01-13
上篇講的:詳解C/C++記憶體配置知識執行個體。本文的內容是轉載,所以只載了重要的部分,不過不會影響閱讀。程式員們經常編寫記憶體管理程式,往往提心弔膽。如果不想觸雷,唯一的解決辦法就是發現所有潛伏的地雷並且排除它們,躲是躲不了的。本章的內容比一般教科書的要深入得多,讀者需細心閱讀,做到真正地通曉記憶體管理。7.1記憶體配置方式記憶體配置方式有三種:
Time of Update: 2017-01-13
剛來公司時,公司的C程式還是32位的。後來我閱讀了一些資料,覺得64位的程式才是真正的趨勢,所以就開始嘗試著開發64位的程式。這篇文章介紹如何在Solaris下搭建64位C語言開發環境,希望給需要的朋友一點協助。(1)gccSolaris的/usr/sfw/bin/gcc可以用來編譯64位C程式,但是需要加-m64編譯選項,否則預設編譯出來的是32位程式。此外也可以從gcc的官網下載gcc原始碼,自行編譯安裝,但是要注意編譯出來的gcc需要是64位的。(2)gdb調試64位C程式需要64位的gd
Time of Update: 2017-01-13
#include <winsock2.h>#include <iphlpapi.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include "setupapi.h"#include <devguid.h>#pragma comment(lib, "IPHLPAPI.lib")#pragma
Time of Update: 2017-01-13
在《Effective C++》裡提到對內建(C-like)類型在函數傳參時pass by value比pass by reference更高效,當用OO的c++自訂類型(存在構造/析構等)pass by reference to const 更好,STL裡的迭代器和函數對象是用C指標實現的,因此pass by value更好。至於為什麼,下面的代碼驗證了下。#include <iostream>using namespace std;int f(int
Time of Update: 2017-01-13
用向量來儲存一條鄰接鏈表,儲存可連通值。實現了判斷是否連通,添加邊,添加頂點的功能。UnDirectGraph.h#pragma onceinclude “stdafx.h”include <vector>using namespace std;class UnDirectGraph{private:int vCount;vector<int> *adj;public:int GetVCount();UnDirectGraph(int
Time of Update: 2017-01-13
問題:找出整數1~N範圍和為N的所有集合,集合裡的數不允許重複。解答代碼如下:#include “stdafx.h”include <iostream>using namespace std;void PrintResult(int *log,int index){for (int i = 0; i <index; ++i){cout<<log[i]<<”
Time of Update: 2017-01-13
模板優先順序隊列,數組實現,再熟悉一下常用演算法,同時簡單的堆排序應用寫了一個是隊列自增長,另一個為了示範我還添加了一個叫做FillPq的方法,這個方法可以使用一個數組直接填充到優先順序隊列裡,此時,優先順序隊列並不優先,然後進行下濾調整,之後建堆完成,輸出即可#include “stdafx.h”template< class T>class PriorityQueue{private:T *pq;int N;int
Time of Update: 2017-01-13
棧直接用鏈表實現,這個比較簡單,不多說,不過C++寫程式,IDE的錯誤偵測不是很給力。至於給定一個中綴運算式,如何不轉換成尾碼運算式,直接求值,方法就是使用兩個棧,一個操作符棧,一個運算元棧,然後從左至右掃描運算式,我這裡中綴運算式計算實現的很簡單,不完整,大家可以擴充。棧的實現是我想寫的,思路如下:1.如何是運算元,壓入運算元棧2.如果是操作符,壓入操作符棧3.如果是左括弧,直接忽略4.如果是有括弧,彈出操作符棧棧頂元素,然後彈出運算元棧兩個元素,進行操作以後結果壓入運算元棧看個圖就好了最後給
Time of Update: 2017-01-13
並查集這個很有意思,並查集是一種樹型的資料結構,用於處理一些不相交集合(Disjoint Sets)的合并及查詢問題。昨天看書看到了,然後用C++簡單實現了下。在Dijkstra演算法中,用來判斷兩個頂點是否在同一個集合裡。裡面定義了兩個類,都是並查集,一個是QuickFind,尋找很快,一個是QuickUnion,合并較快。寫了一些注釋,有一些最佳化的提示.看代碼吧,有什麼問題指出來吧。QuickFind的實現#include
Time of Update: 2017-01-13
因接入平台,平台提供的是一個字串的key作為使用者標識,而且要用到分布式,所以沒法用以前的資料庫遞增來做使用者ID,於是用CRC64來產生uint64_t來作為使用者ID,做法也比較簡單。如下: 代碼如下複製代碼 std::map<size_t, size_t> xLongMap; char szTemp[128] = {0}; boost::crc_optimal<64, 0x04C11DB7, 0, 0, false,
Time of Update: 2017-01-13
C 中delete運算式執行的操作是:1,調用解構函式;2,釋放對象記憶體(operator
Time of Update: 2017-01-13
我只用到了exception_handler模組,暫時還未用到Server模組,因為用到了C++ 11的一些特性,而google-breadpad還沒有C++11版本,所以做了一些修改,集中在類型定義處1.typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t;修改為#if __cplusplus > 199711Ltypedef std::remove_reference<decltype(((struct
Time of Update: 2017-01-13
介紹枚舉可以根據Integer、Long、Short或Byte中的任意一種資料類型來建立一種新型變數。這種變數能設定為已經定義的一組之中的一個,有效地防止使用者提供無效值。該變數可使代碼更加清晰,因為它可以描述特定的值 枚舉類型使一種基礎資料型別 (Elementary Data Type),用於聲明一組命名的常數,當一種變數有幾種可能的取值使,可以定義為枚舉類型。
Time of Update: 2017-01-13
這幾天又仔細研究了下 C OOP ,有點新的結果,在這分享下,下面大概說下.Inherit(繼承) 代碼如下複製代碼 #define CB_CLASS_INHERIT_BEGIN(THIS, PARENT_CLASS)struct THIS {PARENT_CLASS super;#define CB_CLASS_INHERIT_END()};#define CB_CLASS_POINTER_SET_PARENT(THIS, name, value) ((THIS) -
Time of Update: 2017-01-13
使用緩衝保證1~n每次輸出的隨機數不一樣,代碼比較短,思路直接見代碼 代碼如下複製代碼 // copyright (c) cguage.com// e-mail:tangcraig@gmail.com// date: 2014-1-21 #include <iostream>#include <map>#include <cmath>#include <iomanip>using namespace
Time of Update: 2017-01-13
背景就簡單點兒說,最近一個項目C#編寫,涉及浮點運算,來龍去脈省去,直接看如下代碼。float p3x = 80838.0f;float p2y = -2499.0f;double v321 = p3x * p2y;Console.WriteLine(v321);很簡單吧,馬上筆算下結果為-202014162,沒問題,難道C#沒有產生這樣的結果?不可能吧,開啟Visual
Time of Update: 2017-01-13
為了鞏固一下鏈表知識,自己實現的一個雜湊表,在GCC 4.4.7下編譯通過;hash.h 代碼如下複製代碼 /** * Author : maben * Date : 2014-12-23 */#ifndef __HASH_H__#define __HASH_H__typedef struct _bucket { char* key; char*
Time of Update: 2017-01-13
沒有調試器的情況下編寫程式時最糟糕的狀況是什嗎?編譯時間跪著祈禱不要出錯?用血祭召喚惡魔幫你運行程式?或者在每一行代碼間添加printf("test")語句來定位錯誤點?如你所知,編寫程式時不使用調試器的話是不方便的。幸好,linux下調試還是很方便的。大多數人使用的IDE都整合了調試器,但 linux
Time of Update: 2017-01-13
看到一篇文章提到二分法排序,好久沒寫CODE。構思了一下。 代碼如下複製代碼 #include <stdio.h>int binSearch(int, int, int);main(){ int i, n = 10, x = 7; //這裡如果把數組a[]定義為a[n],是錯誤的,不能定義變長數組。 int a[10]; printf("Please
Time of Update: 2017-01-13
什麼是二叉尋找樹二叉樹是每個結點最多有兩個子樹的有序樹。二叉樹常被用於實現二叉尋找樹和二元堆積。值得注意的是,二叉樹不是樹的特殊情形。在圖論中,二叉樹是一個連通的無環圖,並且每一個頂點的度不大於2。有根二叉樹還要滿足根結點的度不大於2。有了根結點後,每個頂點定義了唯一的根結點,和最多2個子結點。然而,沒有足夠的資訊來區分左結點和右結點。使二叉樹成為一顆二叉尋找樹,需要滿足以下兩點:1.對於樹中的每個節點X,它的左子樹中所有項的值都要小於X中的項;2.對於樹中的每個節點Y,它的右子樹中所有項的值都