相关疑难解决方法(0)

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

C++中的哈希表

是C++的插入/删除/查找时间std::map O(log n)吗?是否可以实现O(1)哈希表?

c++ hashtable map

9
推荐指数
2
解决办法
1万
查看次数

将此递归函数转换为迭代

如何将此递归函数转换为迭代函数?

#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

c++ iteration recursion

6
推荐指数
3
解决办法
1193
查看次数

如果在调试配置中编译,C++ hash_map.clear() 会很慢

我有一个使用工具集 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++ > 常规 > 公共语言运行时支持 > 是 …

c++ performance hashmap visual-studio-2010

1
推荐指数
1
解决办法
777
查看次数