Time of Update: 2018-12-03
java為啥慢?1、java的分配記憶體java只把內嵌類型分配到堆棧上面,所有Object類型都分配到堆上面。c++可以把局部變數都分配到堆棧上面。顯然,根據已有測試結果,訪問堆棧的速度要遠高於堆的速度。啟示1:c++不要返回structure,可以用引用先傳入返回對象;啟示2:java對象不要隨便拋棄,盡量延長其生命週期;但並不是說要維持一個對象pool;2、java沒有模板沒有模板的缺點就在於需要進行類型轉換。類型轉換是一個很耗時的操作。如何減少類型轉換?3、4、c++的記憶體佔用如何?t
Time of Update: 2018-12-03
/* a)const int a; b)int const a; c)const int *a; d)int * const a; e)int const * a const; 答案是: a)a是一個常整型數 b)a是一個常整型數 c)a是一個指向常整型數的指標(也就是,整型數是不可修改的,但指標可以) d)a是一個指向整型數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的)。
Time of Update: 2018-12-03
在C++中各種變數/常量的儲存對比: 變數位置 變數種類 可見度 儲存位置 名字的串連 例子 -------- -------- ------ -------- ---------- ---- 函數內部 局部變數 本函數內 堆棧 不存在
Time of Update: 2018-12-03
轉自: http://blog.csdn.net/wangyadong/archive/2009/03/27/4030024.aspx C++中,非虛函數都是靜態繫結,而虛函數卻是動態綁定。為了能夠更清楚地瞭解靜態繫結與動態綁定,我們可以看下面這個例子:#include<iostream>using namespace std;class B{ public: void fun() { cout<<"我來自B"<<endl;
Time of Update: 2018-12-03
********************************************************* 原文:http://www.cplusplus.com/doc/tutorial/ *********************************************************其他資料類型被定義的資料類型(typedef)C++允許我們基於現有的資料類型來定義我們自己的類型。我們可以通過使用關鍵字typedef來實現,它的形式為:typedef
Time of Update: 2018-12-03
random函數不是ANSI C標準,不能在gcc,vc等編譯器下編譯通過。但在C語言中int random(num)可以這樣使用,它返回的是0至num-1的一個隨機數。 可改用C++下的rand函數來實現。rand()%n 範圍 0~n-1rand()主要是實現 產生隨機數,其他我們在這裡可以無視他顯然任意 一個數 rand()%n 範圍顯然是 0~n-1;那麼 如何產生 n~m的數呢? 一樣的 我們只要對rand()進行一些 符號操作就行了;n+rand()%(m-n+1);
Time of Update: 2018-12-03
思路是貪心,方法就是很水的方法。 做法:1.每次派一個機器人從(1,1)開始往右或往下,走到(24,24)為止。2.如果當前格子有垃圾,就清除。3.如果當前所在的格子右邊有垃圾,就往右走。否則,往下走。4.如果走到了最下邊,就一直往右走;如果走到了最右邊,就一直往下走。5.一個機器人走完,檢查還有沒有垃圾。有就再派一個,沒有就停止。Right[i][j]是(i,j)右邊的垃圾數;Down[i][j]是(i,j)下邊的垃圾數;cnt記錄總的垃圾數;res記錄機器人數。Source
Time of Update: 2018-12-03
看到有老師似乎做錯了,糾正一下,C++是太煩人了。一、下面對待用資料成員的描述中,正確的是A : 待用資料成員可以在類體內進行初始化B : 待用資料成員不可以被類的對象調用C : 待用資料成員不能受private控制符的作用D : 待用資料成員可以直接用類名調用解答:---------------------------------------A : 待用資料成員可以在類體內進行初始化答:錯。我記得是:只有靜態、常量的整數(及相容)類型的資料成員,可以在類體內初始化,比如:class
Time of Update: 2018-12-03
貪心思路:cor[i]數組儲存覆蓋到該島的雷達能放置的區間,然後按照左端點從小到大對數組排序。只要雷達放置在某島的cor[i]儲存的區間內,這個島就能被這個雷達覆蓋。排序後,相鄰的兩個區間只有三種情況。1.第二個區間完全在第一個區間的後面。2.第一個區間的後邊一部分與第二個區間的前邊一部分重合。3.第二個區間包含在第一個區間內。先把第一個雷達放在第一個區間的右端點。1.如果第二個區間與第一個區間屬於相鄰區間的第一種情況,那麼第一個區間的右端點顯然不在第二個區間內,需要在第二個區間的右端點放一個新
Time of Update: 2018-12-03
在main中定義了兩個全域變數分別是a,b,一個靜態全域變數c,同時對兩個全域函數進行了extern聲明。在其他檔案中要使用a,b需要用extern先聲明,便可以使用,但是由於是全域變數必然有全域變數的特性。靜態屈居變數只能在本模組中使用,不可以在其他模組中用extern聲明使用靜態局部變數有局部變數的範圍,但是又有全域變數的性質。下面是一個例子:main.cpp中的內容:#include<iostream>using namespace std;int
Time of Update: 2018-12-03
用書上的代碼拼湊的,還是很有成就感的哈支援的運算子號有"+","-","*","/","(",")","#"。支援20位以內不帶正負號的整數,當然可以很容易的改成有符號或者是實型數#include<stdio.h>#include<string.h>#include<stdlib.h>#define OPSETSIZE 7//函數結果狀態碼#define TRUE 1#define FALSE 0#define OK 1#define ERROR
Time of Update: 2018-12-03
1、函數參數壓棧的順序很多人都知道壓棧的順序時從右向左進行壓棧,具體的可觀測的結果如下程式運行。我們都知道Pascal的參數入棧順序時自左向右的,但是為什麼C語言會選擇自右向左呢?這也是C語言比pascal進階的一個地方-C語言通過這種參數入棧的順序實現了對變長參數函數的支援!#include <stdio.h>int Add1(int a, int b){ printf("Add1\n"); return a+b;}int Add2(int a, int b){
Time of Update: 2018-12-03
/*** @file GM_BTree.h* @brief * @author Don Hao* @date 2011-8-22 21:51:35* @version * <pre><b>copyright: </b></pre>* <pre><b>email: </b>hao.limin@gmail.com</pre>* <pre><b>company:
Time of Update: 2018-12-03
簡單地解釋break:跳出迴圈,不再執行迴圈體。continue:結束(跳過)本次迴圈,繼續執行迴圈體。DEMO/*breakDemo*/#include <iostream>using namespace std;int main(){for (int i=0; i<10; i++){cout << "i = " << i << endl;}cout << "break..." << endl;for (int i=
Time of Update: 2018-12-03
大夥在linux/unix上估計遇到過很多關於編碼轉換的問題,我也遇到了,在csdn上發了很多文章,結果都沒人給出一個好的解決辦法,鬱悶啊,經過不斷的測試和摸索,最後在hu-unix-i11上解決了漢字編碼轉換的問題,在linux和別的平台上應該是類似的.最開始遇到的問題就是不能轉換漢字編碼,運行樣本的時候遇到如下的錯誤資訊:Could not create a converter for encoding: GBK
Time of Update: 2018-12-03
Lex工具 ------- Lex工具是一種詞法剖析器產生器,它可以根據詞法規則說明書的要求來產生單詞識別程式,由該程式識別出輸入文本中的各個單詞。 1、lex程式的結構 -定義部分 -規則部分 -使用者子程式部分 其中規則部分是必須的,定義和使用者子程式部分是任選的。 (1) 定義部分 定義部分起始於"%{"符號,終止於"%}"符號,其間可以是包括include語句、聲明語句在內的C語句。 %{ #include "stdio.h" #include "y.tab.h" extern int
Time of Update: 2018-12-03
GDI+是C++中常用的一種圖形映像工具,VB、Delphi等語言也移植了GDI+,.net的諸多語言甚至完全採用GDI+作為繪製其介面。
Time of Update: 2018-12-03
閱讀提示: 《C++影像處理》系列以代碼清晰,可讀性為主,全部使用C++代碼。 《Delphi影像處理》系列以效率為側重點,一般代碼為PASCAL,核心代碼採用BASM。 儘可能保持二者內容一致,可相互對照。 本文代碼必須包括《C++影像處理 -- 資料類型及公用函數》文章中的BmpData.h標頭檔。 映像的表面模糊處理是Photoshop
Time of Update: 2018-12-03
轉載自Leeboy_Wang之前用endl一直以為它只是一個斷行符號換行的功能,剛剛才知道原來endl還有一個功能使用來重新整理緩衝區的。除了endl之外,c++中還有ends,flush,unitbuf,nounitbuf。為什麼要重新整理緩衝區呢? 一句話,為了讓緩衝區的資訊立即強制輸出。 如: cout << "aaa" << endl;和 cout <<
Time of Update: 2018-12-03
#include <string.h>struct A{A(){}A(const A& a){memcpy(this, &a, sizeof(A));}~A(){}A& operator =(const A& a){if (this == &a){return *this;}//Copy your codes from ~A() here, if ~A() is not empty. Do not call it.memcpy(this,