kar*_*jee 5 c++ stdstring stdvector
这个问题是本文的另一面如何有效地将std :: string复制到向量中
我通常以这种方式复制向量(null终止字符串)
std::string s((char*)&v[0]);
Run Code Online (Sandbox Code Playgroud)
或者(如果已经声明了字符串)就像这样
s = (char*)&v[0];
Run Code Online (Sandbox Code Playgroud)
它完成了工作,但也许有更好的方法.
编辑
C风格的演员是丑陋的,我被告知这是怎么回事
s = reinterpret_cast<char*>(&vo[0]);
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 13
只需使用迭代器构造函数:
std::string s(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
(编辑):或者使用char-pointer-plus-size构造函数:
std::string s(v.data(), v.size()); // or &v[0]
Run Code Online (Sandbox Code Playgroud)
如果您的字符串以null结尾并且您想省略终止符,那么使用char*-constructor:
std::string s(v.data()); // or &v[0]
Run Code Online (Sandbox Code Playgroud)
更新:正如@Dave所说,您可以使用相同的语法分配给现有字符串:
s.assign(v.begin(), v.end());
s.assign(v.data(), v.size()); // pointer plus size
s.assign(v.data()); // null-terminated
Run Code Online (Sandbox Code Playgroud)
std::string s( &v[ 0 ] );
Run Code Online (Sandbox Code Playgroud)
在Visual C++ 2005中生成的汇编代码行数不到一半
std::string s( v.begin(), v.end() );
Run Code Online (Sandbox Code Playgroud)