gpt4 book ai didi

c++ - Ostringstream 不同的结果

转载 作者:行者123 更新时间:2023-11-28 00:46:20 28 4
gpt4 key购买 nike

我的代码有一些问题,因为它输出了两个不同的结果。

代码:

void output(int x){


for( int i = 0; i <=x; i++){


std::ostringstream ss;

std::string result;

ss << std::setw(5) << std::left << "Hi" << ' ' << "There " << i << "\n";

std::vector<char> s(result.c_str(), result.c_str() + result.size() + 1u);


result +=ss.str();


std::cout << result;

}



}

输出:

你好 0

你好1

你好2

你好 3

这样调用它是正确的:output(3);,但是当我试图在类中定义它们并使用它时

在函数内部,事情开始变得非常奇怪。我现在使用的代码是:

class myclass{


public:

std::ostringstream ss;

std::string result;


}v;



void output(int x){


for( int i = 0; i <=x; i++){




v.ss << std::setw(5) << std::left << "Hi" << ' ' << "There " << i << "\n";

std::vector<char> s(v.result.c_str(), v.result.c_str() + v.result.size() + 1u);


v.result +=v.ss.str();


std::cout << v.result;

}



}

它输出:

你好 0

你好 0

你好 0

你好1

你好 0

你好 0

你好1

你好 0

你好1

你好2

你好 0

你好 0

你好1

你好 0

你好1

你好2

你好 0

你好1

你好2

你好 3

那是错误的,我如何仍然在类中定义它们并获得与第一个示例相同的输出?

请帮助我。

最佳答案

在第一个示例中,您的字符串流在循环中是本地的。这意味着它会在每次迭代时被破坏并再次创建。

然而,在第二个例子中,这并没有发生,因为流属于类对象 v。并且它与 v 存在的时间一样长。这意味着它将在每次迭代中继续存储所有内容。

要获得相同的结果,请执行此操作

v.result +=v.ss.str();
std::cout << v.result;
v.ss.str(""); // This will clear the string stream of v.
v.result = ""; // This will clear the string of v.

但是我不确定你想要达到什么目的,因为这样做看起来有点毫无意义。

关于c++ - Ostringstream 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130126/

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