C ++ 98の場合、いくつかのオプションがあります。
boost/lexical_cast
BoostはC ++ライブラリの一部ではありませんが、多くの便利なライブラリ拡張が含まれています。
lexical_cast
関数テンプレートは、に、それらがテキストとして表示され、任意の種類の中から共通の変換をサポートするための便利で一貫性のあるフォームを提供しています。
- ブーストのドキュメント
#include "boost/lexical_cast.hpp"
#include <string>
int main() {
int x = 5;
std::string x_str = boost::lexical_cast<std::string>(x);
return 0;
}
ランタイムに関してはlexical_cast
、最初の変換で(私のマシンでは)オペレーションに約80マイクロ秒かかり、その後冗長的に実行すると、かなり高速になります。
itoa
この関数はANSI-Cで定義されておらず、C ++の一部ではありませんが、一部のコンパイラでサポートされています。
- cplusplus.com
これは、gcc
/ g++
を使用してコードをコンパイルできないことを意味しitoa
ます。
#include <stdlib.h>
int main() {
int x = 5;
char * x_str = new char[2];
x_str = itoa(x, x_str, 10); // base 10
return 0;
}
レポートするランタイムはありません。私がある、Visual Studioがインストールされていないと伝えコンパイルできますitoa
。
sprintf
sprintf
C文字列で動作するC標準ライブラリ関数であり、完全に有効な代替手段です。
printfでformatが使用された場合に出力されるのと同じテキストで文字列を構成しますが、内容は出力されるのではなく、strが指すバッファーにC文字列として格納されます。
- cplusplus.com
#include <stdio.h>
int main() {
int x = 5;
char * x_str = new char[2];
int chars_written = sprintf(x_str, "%d", x);
return 0;
}
stdio.h
ヘッダは必要ではないかもしれません。ランタイムに関してはsprintf
、最初の変換で(私のマシンでは)約40マイクロ秒かかり、その後冗長に実行すると、かなり高速になります。
stringstream
これは、整数を文字列に、またはその逆に変換するC ++ライブラリの主な方法です。stringstream
など、ストリームの使用目的をさらに制限する同様の姉妹関数がありますostringstream
。ostringstream
特にを使用すると、コードの読者に<<
、本質的には演算子のみを使用することを伝えます。この関数は、整数を文字列に変換するために特に必要なすべてです。より複雑な議論については、この質問を参照してください。
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
ランタイムに関しては、ostringstream
操作は(私のマシンでは)約71マイクロ秒かかり、その後冗長的に実行すると、かなり高速になりますが、前の関数ほどではありません。
もちろん、他のオプションがあり、これらの1つを独自の関数にラップすることもできますが、これにより、人気のあるものの分析的な外観が提供されます。