gpt4 book ai didi

c++ - 来自 std::unordered_set 的有效构造 std::string

转载 作者:可可西里 更新时间:2023-11-01 18:40:43 29 4
gpt4 key购买 nike

我有一个 unordered_set 字符

std::unordered_set<char> u_setAlphabet;

然后我想从集合中获取一个内容作为 std::string。我的实现现在看起来像这样:

std::string getAlphabet() {
std::string strAlphabet;
for (const char& character : u_setAlphabet)
strAlphabet += character;
return strAlphabet;
}

这是解决这个任务的好方法吗?将 signle 字符添加到字符串似乎不是大型 u_setAlphabet(多个重新分配?)的最佳选择。还有其他方法吗?

最佳答案

最简单、最易读和最有效的答案是:

return std:string(s.begin(), s.end());

实现可以选择预先检测范围的长度并且只分配一次;当给定前向迭代器范围时,libc++ 和 libstdc++ 都会这样做。

string 类还为您提供reserve,就像vector 一样,用于管理容量:

std::string result
result.reserve(s.size());
for (unsigned char c : s) result.push_back(c); // or std::copy
return result;

它还提供了assignappendinsert 成员函数,但是由于它们提供了强异常保证,它们可能必须分配一个在销毁旧缓冲区之前创建新缓冲区(感谢@T.C. 指出了这个关键细节!)。如果现有容量足够,则 libc++ 实现不会重新分配,而 GCC5 的 libstdc++ 实现无条件地重新分配。

关于c++ - 来自 std::unordered_set<char> 的有效构造 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528858/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com