这个问题是How to efficiently copy a std::string into a vector的另一面
我通常以这种方式复制向量(空终止字符串)
std::string s((char*)&v[0]);
或(如果已经声明了字符串),如此
s = (char*)&v[0];
它完成了工作,但也许有更好的方法。
的修改
C风格的演员阵容很丑陋,我被告知这个怎么样
s = reinterpret_cast<char*>(&vo[0]);
答案 0 :(得分:13)
只需使用迭代器构造函数:
std::string s(v.begin(), v.end());
( Edit ):或者使用char-pointer-plus-size构造函数:
std::string s(v.data(), v.size()); // or &v[0]
如果你的字符串以null结尾并且你想省略终止符,那么使用char*
- 构造函数:
std::string s(v.data()); // or &v[0]
更新:正如@Dave所说,您可以对assigning使用与现有字符串相同的语法:
s.assign(v.begin(), v.end());
s.assign(v.data(), v.size()); // pointer plus size
s.assign(v.data()); // null-terminated
答案 1 :(得分:9)
std::string s( &v[ 0 ] );
在Visual C ++ 2005中生成的汇编代码行数不到一半
std::string s( v.begin(), v.end() );
答案 2 :(得分:1)
s.resize( v.size() );
std::copy( v.begin(), v.end(), s.begin() );
你可能为什么......因为一旦那些该死的编译器创建者理解了标准化的力量,这种方法将比其他任何方法都快......
更严肃的说明:
std::string( (char*)v.data(), v.size() );
s.assign( (char*)v.data(), v.size() );
......可能更安全,不会失去效率。