缺少(显而易见的)构建C样式字符串然后使用它来创建std :: string,是否有更快/替代/"更好"的方式来从字符向量初始化字符串?
Gre*_*reg 188
好吧,最好的方法是使用以下构造函数:
template<class InputIterator> string (InputIterator begin, InputIterator end);
Run Code Online (Sandbox Code Playgroud)
这将导致类似于:
std::vector<char> v;
std::string str(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.
LiM*_*Bei 39
我想你可以做到
std::string s( MyVector.begin(), MyVector.end() );
Run Code Online (Sandbox Code Playgroud)
其中MyVector是你的std :: vector.
小智 34
随着C++ 11,你可以做std::string(v.data()),或者如果你的载体不包含'\0'末,std::string(v.data(), v.size()).
Mar*_*one 12
std::string s(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
其中v几乎是可迭代的.(特别是begin()和end()必须返回InputIterators.)
小智 5
我喜欢 Stefan 的回答(2013 年 9 月 11 日),但想让它更强大一点:
如果向量以空终止符结尾,则不应使用 (v.begin(), v.end()):您应该使用 v.data()(对于 C++17 之前的那些,应使用 &v[0]) .
如果 v 没有空终止符,则应使用 (v.begin(), v.end())。
如果您使用 begin() 和 end() 并且向量确实有一个终止零,那么您最终会得到一个字符串“abc\0”,例如,长度为 4,但实际上应该只是“abc”。
| 归档时间: |
|
| 查看次数: |
102545 次 |
| 最近记录: |