C\C++\Java字符串拼接比较
生活随笔
收集整理的這篇文章主要介紹了
C\C++\Java字符串拼接比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C\C++\Java字符串拼接比較:
昨天買好小米盒子,自己折騰了一會然后就教會老媽怎么玩,怎么看還珠格格之后,我閑來無事,突然想起了上次一個項目處理字符串遇到的性能問題,然后就仔細考慮了一下,越考慮發現需要注意的越多,于是開了ubuntu虛擬機測試一下(我的host機器是i7 Q740 四核八線程):
C語言版本是直接用strncpy,純內存字節流操作
C++第一個版本用到了std::string,用append添加字符傳
C++第二個版本用到了std::stringstream,直接ss<<"hello"
Java用StringBuilder
結果是:
C語言運行效率奇高無比,2-3秒
C++std::string,速度9秒,如果注釋掉sb.reserve(10000)那么就是11秒
C++std::stringstream,19秒
Java的StringBuilder,也是11秒
曾經測試過其他方法,都是超過30秒而被我取消了:
vector<char>,第二個循環里push_back('h');五次
C語言string.h的strcat和strncat
總結:
本來以為Java速度和C++不是一個數量級的,現在看來,貌似Java速度也非常高,反而是C和C++如果代碼寫的考慮不周到,那么速度會急劇下降的
?
int main() {int i,j;int num = 1000000;time_t t1;time(&t1);for ( i = 0; i < num; i++) {char a[10000]="";for( j=0; j<300; j++) {int len = strlen("hello");strncpy(a+j*5,"hello",len);}}time_t t2;time(&t2);printf("%d %d\n",t1,t2);printf("%d\n",t2-t1); }int main() {int num = 1000000;time_t t1;time(&t1);for (int i = 0; i < num; i++) {std::string sb;sb.reserve(10000);//這行代碼如果注釋掉,那么運行時間是11秒for(int j=0; j<300; j++) {sb.append("hello");}}time_t t2;time(&t2);std::cout<< t1 <<" " <<t2 <<"\n";std::cout<< t2-t1<<"\n"; }int main() {int num = 1000000;time_t t1;time(&t1);for (int i = 0; i < num; i++) {std::stringstream ss;for(int j=0; j<300; j++) {ss<<"hello";}}time_t t2;time(&t2);std::cout<< t1 <<" " <<t2 <<"\n";std::cout<< t2-t1<<"\n"; }?
public static void main(String[] args) throws Exception {long t1 = System.currentTimeMillis();int num = 1000000;for (int i = 0; i < num; i++) {StringBuilder sb = new StringBuilder();for (int j = 0; j < 300; j++) {sb.append("hello");}}long t2 = System.currentTimeMillis();System.out.println(t2 - t1); }?
?
總結
以上是生活随笔為你收集整理的C\C++\Java字符串拼接比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企查查app怎么永久注销
- 下一篇: 影视大全纯净版如何投屏电视