我正在構建我的第一個C++應用程序並選擇一個有效的C++庫在此階段依賴的過程中,是我正在考慮的設計考慮因素之一。哪個效率高,itoa或sprintf?
因此,我想將整數類型轉換爲字符串並決定是否使用;
sprintf(string, "%d", x);
或者
整型ASCI
itoa(x, string);
任何人都可以提出這些途徑之一是有效的,可能是爲什麼呢?
謝謝。
我正在構建我的第一個C++應用程序並選擇一個有效的C++庫在此階段依賴的過程中,是我正在考慮的設計考慮因素之一。哪個效率高,itoa或sprintf?
因此,我想將整數類型轉換爲字符串並決定是否使用;
sprintf(string, "%d", x);
或者
整型ASCI
itoa(x, string);
任何人都可以提出這些途徑之一是有效的,可能是爲什麼呢?
謝謝。
請勿使用其中之一。使用std::stringstream
等。
std::stringstream ss;
ss << x;
ss.str(); // Access the std::string
無論採用哪種方式,轉換爲字符串都不太可能成爲應用程序執行時間的重要組成部分。
Downvoter:關心評論? –
這不是我,但我猜投票可能是因爲這個答案沒有回答原來的問題。 – legends2k
'stringstream'非常慢,這可能是一些應用程序(例如HFT交易中)的重要組成部分,也不允許轉換爲現有的char *緩衝區。 – javapowered
它們都是有效的。可能更重要的是要注意itoa()
不是C++標準的一部分,因此在許多常見的運行時中都不可用。 (特別是,它不是libstdc++
的一部分,所以它在Mac OS X或Linux上不可用。)
從純算法的角度來看,可以認爲itoa
會更快,因爲sprintf
有額外的成本來解析格式描述符字符串。然而,如果沒有在實施中對兩個函數的成本進行基準測試,而且工作負載不重要,則無法確定。
此外,這不是蘋果比較蘋果,因爲這兩個功能都不相同。 sprintf
可以做比itoa
更多的格式化,除了前者是標準功能而後者不是。
旁白:如果你可以使用C++ 11可以使用to_string
返回你的std::string
。如果你想要十進制以外的表示,你可以這樣做:
int i = 1234;
std::stringstream ss;
ss << std::hex << i; // hexadecimal
ss << std::oct << i; // octal
ss << std::dec << i; // decimal
std::bitset<sizeof(int) * std::numeric_limits<unsigned char>::digits> b(i);
ss << b; // binary
std::string str = ss.str();
什麼是'istringstream'或'boost :: lexical_cast'?畢竟它是C++。 – pmr
整數格式是否真的會成爲應用程序的瓶頸? –
@Kerrek SB在這個階段每一個小數。 – Bitmap