在我的学校,我们必须遵循一个风格指南,其中指出,我们必须在其被使用的函数的顶部声明每个变量在循环的每次迭代,而不是在使用之前。这通常意味着您必须在循环内部使用它们时重置或清除变量,因为它们没有在循环中声明。我不明白为什么每个循环迭代需要“清除”一个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. 为什么C++字符串需要\ 0?
- 3. 为什么需要一个变量指向一个结构
- 4. 我是否需要将会话变量转换为字符串?
- 5. 我需要从一个字符串
- 6. 当我需要一个字符串时,我能用一个无符号字符*做什么?
- 7. 我有一个字符串“\ u00a0”,我需要用它替换它“”str_replace failed
- 8. 为什么我需要在Javascript中使用字符串替换时添加/ g?
- 9. 装配需要什么?为什么我们使用它们?
- 10. 为什么在分配给它之前需要刷新变量?
- 11. 为什么python需要unicode类型,因为我可以直接用任何unicode字符声明一个变量?
- 12. 清除std :: vector需要赋值运算符。为什么?
- 13. PHP:为什么我们需要字符串比较功能?
- 14. 为什么我的公共字符串不改变它的字符串?
- 15. 为什么我在清除变量后丢失数据
- 16. 为什么我的一个变量不需要声明而另一个呢?
- 17. 为什么要使用单独的字符串常量文件?
- 18. 我需要在SQL Server数据库中使用字符串变量在proc 2005
- 19. Spring嵌套事务 - 为什么我需要清除EntityManager?
- 20. 我需要在java中随机删除一个字符串中的一半字
- 21. 我一直在使用Authlogic,但现在需要删除它的所有痕迹。我需要做什么?
- 22. ActionMappingParametersInteceptor - 为什么我需要它
- 23. 为什么我们需要建议一个变量存储在寄存器中?
- 24. 我需要一个URL来代替使用SED字符串
- 25. 为什么NSString变量需要保留?
- 26. 在我的Ruby代码中,为什么我的变量在一个字符串中产生一个新行?
- 27. 为什么我需要保留一个指向我的QWidget的变量?
- 28. aspnet_regiis我 - 为什么我需要使用它?
- 29. 我怎么能在一个字符串变量
- 30. 给定一个字符串,我怎么知道它是否需要解码
你的风格指南是疯了。 – melpomene
最佳做法通常与您的风格指南完全相反。 – Galik
要回答你的问题,你能给一个可以评论的例子吗? – Galik