有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
如何将此递归函数转换为迭代函数?
#include <cmath>
int M(int H, int T){
if (H == 0) return T;
if (H + 1 >= T) return pow(2, T) - 1;
return M(H - 1, T - 1) + M(H, T - 1) + 1;
}
Run Code Online (Sandbox Code Playgroud)
嗯,它是一个3行代码,但我很难将其转换为迭代函数.因为它有2个变量.而且我什么都不知道Stacks所以我无法转换它.
我这样做的目的是提高功能的速度.这个功能太慢了.我想用map,使这个速度更快,但我有3个变量M,H并且T让我不能使用map
我有一个使用工具集 V10 的托管 VS2010 C++ 项目。我无法弄清楚的是,如果我使用调试配置编译我的项目,hash_map 析构函数会异常缓慢。hash_map.clear() 稍微快一点,但是同样痛苦。
注意:这不能在VS2015 + Win10上重现。很可能是 VS2010 问题。
我环顾网络,但是没有任何解释我所得到的内容。
1)我检查了_NO_DEBUG_HEAP=1环境设置。这对我不起作用,因为我没有通过 VS 进行调试。我只是在调试配置中编译代码并在没有调试器的情况下运行它。
2)这不是插入大量数据。插入没问题。这只是简单地从 hash_map 中清除数据。
3)我认为如果我在C++代码生成设置下关闭C++异常,我可以解决问题,但事实并非如此。
如果我在发布配置中编译代码,就会立即销毁。如果我在调试配置中编译代码,销毁时间大约为 5 分钟或更长时间,具体取决于数据有多大。
我确信这只是我需要纠正的某种 C++ 项目设置。有人知道怎么修这个东西吗?
回顾一下,我的项目是 VS2010 托管 C++(C++ 和托管 C# 对象之间的混合),工具集是 v10。当我使用调试配置编译代码时,销毁 hash_map 需要 5 分钟(比插入数据本身慢)。当我使用发布配置编译代码时,它是即时的。
我该如何解决?谢谢。
这是我使用 VS2010 创建的新项目的完整代码。我只用了不到 5 秒的时间就插入了物品。myMap.clear() 需要 202 秒。myMap 析构函数需要 280 秒。
这就是我所做的。
1) 使用 VS2010 创建新的 C++ 控制台应用程序...
2) 设置配置属性...
2.1) 常规 > 公共语言运行时支持 > 不支持...
2.2) 常规 > 字符集 > 使用多字节...
2.3) C/C++ > 常规 > 公共语言运行时支持 > 是 …