我正在构建我的第一个C ++应用程序并选择在此阶段依赖的高效C ++库,这是我正在考虑的设计考虑之一。
因此我想将整数类型转换为字符串并决定是否使用;
sprintf(string, "%d", x);
或者
整合到ASCI
itoa(x, string);
任何人都可以建议这些路线中的哪一种有效且可能为什么?
感谢。
答案 0 :(得分:14)
他们都很有效率。注意itoa()
不是C ++标准的一部分可能更为相关,因此在许多常见的运行时中都不可用。 (特别是,它不是libstdc++
的一部分,因此在Mac OS X或Linux上不可用。)
答案 1 :(得分:10)
请勿使用其中任何一种。使用std::stringstream
等等。
std::stringstream ss;
ss << x;
ss.str(); // Access the std::string
无论哪种方式,转换为字符串都不太可能成为应用程序执行时间的重要部分。
答案 2 :(得分:0)
从纯算法的角度来看,可以认为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();