在我的学校,我们必须遵循一个风格指南,其中指出,我们必须在其被使用的函数的顶部声明每个变量在循环的每次迭代,而不是在使用之前。这通常意味着您必须在循环内部使用它们时重置或清除变量,因为它们没有在循环中声明。我不明白为什么每个循环迭代需要“清除”一个stringstream变量,并希望有人能够阐明这一点。我知道如何来清除它只是想知道为什么这是必要的。为什么我需要清除一个字符串流变量在使用它
0
A
回答
4
背后的基本原理是,在循环内部创建一个重的对象会导致性能下降。 :: std :: stringstream是这些对象中的一个,并且始终创建和销毁字符串流是一个常见的错误。但是,这样的规则不适用于灯对象,如原始类型。
考虑test case:
#include <chrono>
#include <sstream>
#include <iostream>
int main()
{
using namespace std;
using namespace chrono;
auto const loops_count{1000000};
auto const p1{high_resolution_clock::now()};
{
stringstream ss;
for(auto i{loops_count}; 0 != i; i--)
{
ss.str(string()); // clear
ss << 1;
}
}
auto const p2{high_resolution_clock::now()};
{
for(auto i{loops_count}; 0 != i; i--)
{
stringstream ss; // recreate
ss << 1;
}
}
auto const p3{high_resolution_clock::now()};
cout << duration_cast<milliseconds>(p2 - p1).count() << "ms "
<< duration_cast<milliseconds>(p3 - p2).count() << "ms"
<< endl;
return 0;
}
第一环为35ms,第二431ms
+0
谢谢!完美地回答了我的问题! – Zach
相关问题
- 1. 清除字符串变量
- 2. 为什么我需要Iterator接口,为什么要使用它?
- 3. 为什么我需要初始化一个int变量为0?
- 4. 为什么C++字符串需要\ 0?
- 5. 我需要一个替代方法来串流字符串。 C++
- 6. 为什么Mule DataWeave输出流量变换为字符串?
- 7. 在Java中,为什么要为字符串指定一个方法,而它是用于数组的变量?
- 8. 初始化一个字符串,为什么需要`@`?
- 9. 为什么我们需要投放变量而不分配它?
- 10. 如何清除字符串变量?
- 11. 我有一个问题。我需要分裂字符串变量在PHP
- 12. 为什么创建一个常量字符串变量时不能使用String.Empty?
- 13. 空字符串+变量:为什么?
- 14. 为什么需要一个变量指向一个结构
- 15. 我是否需要将会话变量转换为字符串?
- 16. 我需要从一个字符串
- 17. 当我需要一个字符串时,我能用一个无符号字符*做什么?
- 18. 为什么我需要在awk字符串常量中隐藏圆括号?
- 19. EntityManager.flush是做什么的,为什么我需要使用它?
- 20. 装配需要什么?为什么我们使用它们?
- 21. 模型中有什么?为什么我们需要使用它
- 22. 为什么我需要std和string库在C++中使用字符串
- 23. 为什么我需要在Javascript中使用字符串替换时添加/ g?
- 24. 我有一个字符串“\ u00a0”,我需要用它替换它“”str_replace failed
- 25. 为什么这个索引字符串清除$ _SESSION数组?
- 26. 为什么在分配给它之前需要刷新变量?
- 27. ctime()返回一个字符串,为什么我们不需要释放()这个字符串的内存?
- 28. 为什么它在字符变量中键入多个字符时起作用?
- 29. 为什么我的POST变量显示在URL字符串上?
- 30. 为什么我在变量的末尾有随机字符串?
你的风格指南是疯了。 – melpomene
最佳做法通常与您的风格指南完全相反。 – Galik
要回答你的问题,你能给一个可以评论的例子吗? – Galik