[英]Which is efficient, itoa or sprintf?
我正在構建我的第一個 C++ 應用程序,並在這個階段選擇一個高效的 C++ 庫來依賴,這是我正在考慮的設計考慮之一。
因此,我想將 integer 類型轉換為字符串並決定是否使用;
sprintf(string, "%d", x);
或者
Integer 到 ASCI
itoa(x, string);
誰能建議其中哪一條路線有效,可能是為什么?
謝謝。
他們都很有效率。 注意itoa()
不是 C++ 標准的一部分可能更相關,因此在許多常見的運行時中不可用。 (特別是,它不是libstdc++
的一部分,因此在 Mac OS X 或 Linux 上不可用。)
不要使用其中任何一個。 使用std::stringstream
等等。
std::stringstream ss;
ss << x;
ss.str(); // Access the std::string
無論哪種方式,轉換為字符串都不太可能成為應用程序執行時間的重要部分。
從純算法的角度來看,可以說itoa
會更快,因為sprintf
具有解析格式描述符字符串的額外成本。 但是,如果沒有在實現中對這兩個功能的成本進行基准測試,並且工作量很大,則無法確定。
這也不是蘋果對蘋果的比較,因為這兩個功能是不等價的。 sprintf
可以比itoa
做更多的格式化,除了前者是標准 function 而后者不是。
另外:如果您可以使用 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.