我正在检索和存储字符串的一部分,可以使用std::string::erase或std::string::substr。我想知道以下哪种方法更快(完成时间更短)和更有效(内存分配/重新分配更少)。此外,有关erase和substr如何分配/重新分配内存的任何信息都将非常有帮助。谢谢!
std::string nodeName("ABCD#XYZ#NodeName");
const std::string levelSeparator("#");
选项1:使用 std::string::substr
std::string::size_type nodeNameStartPosition = nodeName.rfind(levelSeparator);
if (nodeNameStartPosition != std::string::npos)
{
nodeNameStartPosition += levelSeparator.length();
nodeName = nodeName.substr(nodeNameStartPosition);
}
选项2:使用std :: string :: erase
std::string::size_type nodeNameStartPosition = nodeName.rfind(levelSeparator);
if (nodeNameStartPosition != std::string::npos)
{
nodeNameStartPosition += levelSeparator.length();
nodeName = nodeName.erase(0, nodeNameStartPosition);
}
substr
函数。如果你想要从一个字符串中删除内容,就使用erase
函数。 - Luchian Grigoresubstr
,即使仅凭纯粹的奇迹erase
更快(我真的怀疑)。你所说的“直观性”极大地弥补了任何性能损失(虽然可能没有)。 - Luchian Grigore