最近在拜读《C++ Primer》,C++ 标准库里的string 类型的确比 C 风格的字符串好用(代码简洁、安全、易读),但是心里总担心其包装好了性能可能会损失,于是就做了下面这个小测试,来比较一下二者的性能,我选取了3个比较常用的字符串操作——开辟内存、复制、比较——循环执行一定次数,统计其所耗费的时间。
下面是C++测试代码:
#include <iostream>
#include <cstring>
#include <string>
#include <ctime>
using namespace std;
int main()
{
/********* C++ string 类型 **************/
string str1("hello world. I love C plus plus!");
size_t cycle = 10000000; // 循环1000万次
time_t time1 = time(NULL); //获取当前时间
for (size_t ix = 0; ix != cycle; ++ix)
{
string str2 = str1;
if (str1 != str2)
{
//do something...
}
}
time_t time2 = time(NULL); //获取当前时间
//********** C-style string 类型 *************/
for (size_t ix = 0; ix != cycle; ++ix)
{
char * cp = new char[str1.size()];
strncpy(cp, str1.c_str(), str1.size());
if (strcmp(cp, str1.c_str()))
{
//do something...
}
delete [] cp;
}
time_t time3 = time(NULL); //获取当前时间
//显示
cout << "C++ string consume time: " << difftime(time2, time1) << " seconds." <<endl;
cout << "C style string confume time: " << difftime(time3, time2) << " seconds" << endl;
return 0;
}
运行结果:
第1次运行结果:
第2次运行结果:
第3次运行结果:
结论:就多次运行结果平均来看,C++标准库中的string类型在保持代码简介、安全、易读的同时,还保持了其极高的性能。所以,C++开发中尽量用标准库的string类型来
代替C 风格的字符串。(《C++ Primer》中一直在建议使用标准库,我想大概就是出于此吧~)