您认为哪种实现方式更好?
std::string ToUpper( const std::string& source )
{
std::string result;
result.resize( source.length() );
std::transform( source.begin(), source.end(), result.begin(),
std::ptr_fun<int, int>( std::toupper ) );
return result;
}
和...
std::string ToUpper( const std::string& source )
{
std::string result( source.length(), '\0' );
std::transform( source.begin(), source.end(), result.begin(),
std::ptr_fun<int, int>( std::toupper ) );
return result;
}
区别在于第一个在默认构造函数之后使用reserve
方法,而第二个使用接受字符数的构造函数。
编辑 1. 我不能使用 boost 库。 2. 我只是想比较 allocation-during-constructor 和 allocation after-constructor。
最佳答案
简单的怎么样:
std::string result;
result.reserve( source.length() );
std::transform( source.begin(), source.end(),
std::back_inserter( result ),
::toupper );
?
然后我个人会改用 boost。
关于c++ - 复制 std::string 时的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5242925/