输出速度

时间:2012-11-13 03:07:54

标签: c++ output

我用C ++编写代码。 我们做一些字符串。我被要求确定以下哪一项更快:

cout << "s:"  + s  + "s:"  + s  + " s:"  + s  + "\n";

cout << "s:" << s << "s:" << s << " s:" << s << "\n";

我反复运行它们,发现第二个更快。我花了一些时间试图找出原因。我认为这是因为在第一个中,首先连接字符串然后输出到屏幕。但第二个只是直接输出到屏幕。这是对的吗?

4 个答案:

答案 0 :(得分:4)

第一个可能涉及字符串连接的一些内存分配,然后将最终的连接字符串复制到输出缓冲区。第二个将简单地将已分配的字符串数据复制到已分配的输出缓冲区。

答案 1 :(得分:0)

从理论的角度来看,第二个例子是线性时间,而第一个例子可以是二次时间(在子串的数量上),具体取决于实现。

要确定实现是否属于这种情况,您必须在机器代码中查看源代码和(因为编译器可能会优化)。

简而言之,为什么依赖于实施的原因,并且通常,确定“哪个最快”,除了 MEASURE 之外别无选择。 “原因”可以作为启发式指南。但这就是全部:最终它的测量,现实,重要。

答案 2 :(得分:0)

您的假设是,由于第一次创建字符串对象,第二个更快可能是正确的。这里的关键是“可能”。这些是std库函数,因此可以具有不同的实现细节,因为标准定义了行为而不是如何实现它。从理论上讲,您可以找到一个标准的库实现,其中与您的发现完全相反。

答案 3 :(得分:0)

我想你想看看上一个问题的答案,以便进行全面的撰写:Efficient string concatenation in C++