是不是還在使用 to_string,很影響性能的好不。
零、背景
之前在《你知道嗎?string比字元串快20%》文章中介紹了 string 代替 字元串 可以提升不少 性能,收到不少好評。
今天遇到數字轉字元串函數,突然意識到這個5年前我也壓測過。
于是找到壓測程式,修改後重新壓測,發現最優的實作比
c++
自帶的
to_string
快4倍,這裡分享給大家。
一、基本需求
基本需求是有一個數字,想轉化為字元串。
c++
自帶的函數是
to_string
,
c
的話沒有自帶函數,我們需要使用
snprintf
來實作。
系統函數為了相容各種情況,會實作的特别複雜,這也導緻最終這些系統函數性能很低。
我分别對比了
to_string
、
snprintf
以及自己實作這三個方法,發現自己實作的比系統自帶的函數快5倍,也就是提升了至少400%。
二、資料實作
to_string
的實作最簡單,直接傳參即可傳回 string。
snprintf
的實作需要先定義一個 buf, 然後把數字轉換到字元串裡,最後再指派給 string。
自己實作和
snprintf
類似,不過是自己不斷除 10 得到每一位的字元的,最後轉化為 string。
對比資料如下, 可以看到,自己實作平均需要 0.027us, 而
to_string
則需要 0.14us,相差五倍之多。
三、最後
to_string
執行一次平均使用 0.14us, 時間還是蠻多的,大家以後如果比較注重性能,就要盡量少使用這個函數了。
相關代碼已經上傳到 github, 公衆号背景回複
數字轉字元串
擷取源碼位址。
-EOF-
題圖:來源自朋友圈。
上篇文章:視訊的比特率、關鍵幀、FPS啥意思?
推薦:你知道嗎?string比字元串快20%
本文公衆号:天空的代碼世界
個人微信号:tiankonguse
微網誌:tiankongus
twitter:tiankonguse
B站:點選原文直達
微信群:微信拉你(算法閑聊群)
QQ算法群:165531769(比賽通知群)
知識星球:不止算法