Windows 下C++ 学习平台的选择
对于大多数人来说,计算机只是一个工具,作为一个工科大学生,我不是程序员,但也有很多用得着程序的地方,一个良好的平台,对学习无疑能起到极大的促进作用。
一、为什么选择C++
之所以选择C++,是因为在科研方面,C++有许多已经很成熟的库,也有许多前人的工作可以借鉴,尽管其本身的学习要难些,但资料很多,遇到问题也不难在google上得到答案,而且C++程序的效率比较高。写程序的效率方面,不拘泥于C风格,适应起STL风格的编程,也还是比较高的。
二、IDE
选定了语言,就要选具体的开发平台了,不像国外,国内还是windows当道,机子配置低的可以选择eclipse,还可以的可以选择vs2008(普通双核就很ok了,没有传说中的那么夸张),但是msvc编译器这玩意还是有很大的优化余地的,在这里选择了用SGI STL库取代其自带的库,同时试用了Intel C++编译器11.1版本。原因很简单,SGI STL的效率比自带库高得多了,Intel编译器才颇有独到之处,请看下文。
三、STL库的选择
我借用 C++ Primer测试string和C风格字符串的一段程序作了测试,源代码如下:
#include <ctime>
#include <string>
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc,char *argv[])
{
clock_t StartClock,EndClock;
const int LoopTimes=5000000;
for (int i=0;i<1000;i++)
{
sin(5.0);
}
StartClock=clock();
//C-style code
const char *pc=”a very long literal string”;
const size_t len=strlen(pc);
for (size_t ix=0;ix!=LoopTimes;ix++)
{
char *pc2=new char[len+1];
strcpy(pc2,pc);
if (strcmp(pc2,pc))
{
cout<<”error”<<endl;
}
delete [] pc2;
}
EndClock=clock();
double DurationTime1=static_cast<double>(EndClock-StartClock)/CLOCKS_PER_SEC;
StartClock=clock();
//string-style code
string str(“a very long literal string”);
for (string::size_type ix=0;ix!=LoopTimes;++ix)
{
string str2=str;
if (str2!=str)
{
cout<<”error”<<endl;
}
}
EndClock=clock();
double DurationTime2=static_cast<double>(EndClock-StartClock)/CLOCKS_PER_SEC;
cout<<”C-style: “<<DurationTime1<<” s.”<<endl;
cout<<”String-style: “<<DurationTime2<<” s.”<<endl;
return 0;
}
测试平台:
CPU:Intel Q9550
内存:4G
系统:Windows 7 ultimate x64
测试的结果如下:
|
编译平台 |
C风格 |
string |
|
Intel 11.1 x86(VS STL) |
0.579 |
0.888 |
|
Intel 11.1 x86(SGI STL) |
0.579 |
0.340 |
|
Intel 11.1 x64(VS STL) |
0.399 |
0.530 |
|
Intel 11.1 x64(SGI STL) |
0.422 |
0.073 |
|
MSVC9 x86(VS STL) |
0.578 |
0.967 |
|
MSVC9 x86(SGI STL) |
0.585 |
0.345 |
|
MSVC9 x64(VS STL) |
0.559 |
0.559 |
|
MSVC9 x64(SGI STL) |
0.567 |
0.102 |
|
MinGW with GCC4.4 x86 |
1.573 |
0.208 |
|
MSVC10 x86(VS STL) |
0.521 |
0.554 |
|
MSVC10 x64(VS STL) |
0.550 |
0.430 |
很明显,VS STL没有达到Lipman描述的超过C风格的效率,而SGI STL则可以,测试中32位平台效率最高的是GCC4.4,这也是一个优秀的编译器,不过还是在Linux下用起来比较顺当。另外64位平台明显比32位快,对速度比较敏感的项目可以考虑迁移平台了。
四、boost库
boost库又被称为未来的标准库,其中包括已经纳入tr1甚至即将发布的c++ 0x标准中的库,lambda表达式等新鲜东西不光适合尝鲜,也很有益于开发效率,也是我下一步将要学习的大头之一。
五、Qt
选择它的原因很简单,相比较于MFC,它实在是好学得多了,我不是程序员,我只是想要用一个简单的界面表达我想要达到的功能,也许C#+Windows Form会更简单,但是我真的懒得再多学一门语言,也不擅长混合编程。
六、后记
补遗一下,Visual Studio 2008下有个很好用的工具,就是大名鼎鼎的Visual Assist了,番茄很好吃,也是我偏爱这个IDE的很大原因之一,对我来说,傻瓜又好用才是王道。
下一次该要记录的,就是这个平台的搭建了。
近期评论