gpt4 book ai didi

C++:有效地将整数添加到字符串

转载 作者:太空狗 更新时间:2023-10-29 19:50:23 25 4
gpt4 key购买 nike

我知道如何将整数添加到字符串中,但我不确定我这样做是否有效。我有一个类,我经常必须返回一个字符串加一个整数(每次不同的整数),在 Java 中我会做类似的事情

public class MyClass {
final static String S = "MYSTRING";
private int id = 0;

public String getString() {
return S + (id++);
}
}

但在 C++ 中我必须这样做;

class MyClass {
private:
std::string S; // For some reason I can't do const std::string S = "MYSTRING";
int id;

public:
MyClass() {
S = "MYSTRING";
id = 0;
}

std::string getString() {
std::ostringstream oss;
oss << S << id++;
return oss.str();
}
}

一个额外的约束:我不想(事实上,不能)使用 Boost 或任何其他库,我将不得不使用标准库。

事情是这样的;代码有效,但在 C++ 中我必须创建一堆 ostringstream 对象,因此它似乎效率低下。公平地说,也许 Java 也做同样的事情,我只是没有注意到它,我说它效率低下主要是因为我对字符串知之甚少。

有没有更有效的方法来做到这一点?

最佳答案

std::ostringstream是在 C++ 中执行此操作的“标准”方法。您可以通过一些自定义编码或费力地比较 ostringstream 的性能来提高效率。 , itoa , 和 sprintf在您将要部署此程序的所有系统上,但这可能不值得付出努力。

我会说 std::ostringstream 的真正问题解决方案与效率无关。真正的问题是代码看起来太复杂了。

我知道您不想使用 Boost,但如果您查看 Herb Sutter 的 The String Formatters of Manor Farm , 你可以只复制 lexical_cast<>() 的(非常小的)定义模板到您的程序中。那么您的代码将如下所示:

std::string getString() {
return S + lexical_cast<std::string>(id++);
}

这是否比您现有的解决方案更有效取决于很多因素(例如,您的编译器内联模板实例化的程度如何),但它看起来确实更干净。

关于C++:有效地将整数添加到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724316/

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