網站:Boost C++ Libraries(下載)
Step 1. 取得Boost libraries
到網站的Download去下載,然後解壓縮(D:/boost_1_42_0)
Step 2. 建置Bjam
進入D:/boost_1_42_0,然後執行bootstrap.bat
跑完之後在這個目錄就會多出一個bjam.exe
Step 3. 建置Boost Libraries
在D:/boost_1_42_0建立一個buildall_vc90.bat內容如下
bjam toolset=msvc-9.0 variant=debug threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION
bjam toolset=msvc-9.0 variant=release threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION
執行剛剛建立的那個buildall_vc90.bat,等他跑完在D:\boost_1_42_0\stage\lib應該有一堆*.lib、*.dll
Step 4. 設定Visual Studio 2008
開啟Visual Studio 2008,工具 => 選項 => 專案和方案 => VC++目錄
顯示目錄的那個下拉選單
選Include檔案加入D:\boost_1_42_0
選程式庫檔加入D:\boost_1_42_0\stage\lib
最近遇到的一個問題Stack overflow,不難解~改用new&delete就對了丫,結果還是錯,找了一下資料是用new&delete沒錯,但是為啥不行,最後發現原來還有別的地方有用一樣的數字來宣告,程式如下:
一開始找出來發生錯誤的地方(我一直以為是這錯@@a)
const unsigned int numSolution1 = 50;
// 掛
Solution sol1[numSolution1];
// 正常來說改成這樣就OK了,結果調成100還是會掛
Solution *sol1 = new Solution[numSolution1];
最後發現~另外還有幾個個檔案有類似下面的程式:
// 掛,因為這邊也要改用new
const unsigned int numSolution2 = numSolution1 * 2;
Solution sol2[numSolution2];
閱讀全文…
安裝相關套件:
# 必要套件
sudo apt-get install gcc build-essential g++ rpm
# this is only required on 64bit Ubuntu/Debian systems
sudo apt-get install ia32-libs
# For use the Intel IDB graphical debugger
sudo apt-get install openjdk-6-jre-headless
Ubuntu 9.10後改用libstdc++6,而Install Intel C++ Compiler需要libstdc++5,所以要另外安裝。先到http://packages.debian.org/stable/base/libstdc++5下載adm64的版本用dpkg安裝,再下載i386解開,並取出函式庫
# 下載並adm64的版本
wget http://debian.linux.org.tw/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_amd64.deb
sudo dpkg -i libstdc++5_3.3.6-18_amd64.deb
# 下載i386並解開
wget http://debian.linux.org.tw/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb
dpkg --extract libstdc++5_3.3.6-18_i386.deb ./
# 出函式庫
cd usr/lib
sudo cp libstdc++.so.5.0.7 /usr/lib32
cd /usr/lib32
sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5
然後就可進入Install Intel C++ Compiler的安裝了,裝完之後把下面指令加入到.bashrc即可直接使用icc
source /opt/intel/Compiler/11.1/069/bin/iccvars.sh intel64
參考資料:Using Intel Compilers for Linux with Ubuntu
Call by Value
// 宣告方式
void test(int param) {
// 參數在傳入時會copy一份到param
// 所以如果傳入的是一個大量的資料,則會使程式效能變差
// 但是在function內對param異動都不會影響num
.....;
}
// 呼叫方式1
int num;
test(num);
// 呼叫方式2
int *num;
test(*num);
Call by Pointer
// 宣告方式
void test(int *param) {
// param接收的是記憶體位址,所以呼叫時要特別注意
// 在function內對param做任何的異動都會影響到num
.....;
// 但是可以把param的記憶體位址再改掉
int temp;
param = &temp;
}
// 呼叫方式1
int num;
test(&num);
// 呼叫方式2
int *num;
test(num);
Call by Reference
// 宣告方式
void test(int ¶m) {
// 可以把param當成是一般的變數使用
// 但他又很像是Call by Pointer記憶體位址會被設成跟傳入變數一樣(任何的異動都會影響到num)
// 不過卻又不像Call by Pointer,因為不能修改記憶體位址,而且呼叫方式是跟Call by Value一樣
.....;
}
// 呼叫方式1
int num;
test(num);
// 呼叫方式2
int *num;
test(*num);
C程式簡介
蠻完整的C/C++教學網頁
C 語言學習筆記、C++ 學習筆記
這個也蠻完整的,不過內容比較簡要
C 程式語言、C++ 程式語言
比較少詳細介紹,大部份是一些比較需要注意的地方
C/C++哪些地方會用到pointer呢?
值得一看的文章,重點在比較C/C++的pointer、reference、vector、array…
pointer和reference有什麼差別呢?
C++為了解決pointer程式不易閱讀的問題,增加了reference型別,C#/Java也取消了pointer,用reference取代pointer,但reference和pointer有什麼不同呢?
C++ Library Reference、C++ Reference
方便的Reference,寫程式時很好用
複製一個iclvars.bat然後在最後加後cmd,這樣他跟完設定後視窗就不會關掉了
執行這個iclvars.bat並cd到放Makefile的目錄後,可以用下面這些指令來編譯:
rem 建置
nmake
rem 重建
nmake rebuild
rem 清除編譯的檔案
nmake clean
在放程式碼的目錄下建立Makefile如下:
閱讀全文…