问题标签 [stl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
51843 浏览

c++ - What's the best hashing algorithm to use on a stl string when using hash_map?

I've found the standard hashing function on VS2005 is painfully slow when trying to achieve high performance look ups. What are some good examples of fast and efficient hashing algorithms that should void most collisions?

0 投票
2 回答
16691 浏览

c++ - 为什么 std::stack 默认使用 std::deque ?

由于要在堆栈中使用容器所需的唯一操作是:

  • 背部()
  • 推回()
  • pop_back()

为什么它的默认容器是双端队列而不是向量?

deque 重新分配是否在 front() 之前提供元素缓冲区,以便 push_front() 是一种有效的操作?这些元素是不是被浪费了,因为它们永远不会在堆栈的上下文中使用?

如果以这种方式使用双端队列而不是向量没有开销,为什么priority_queue 的默认值也是向量而不是双端队列?(priority_queue 需要 front()、push_back() 和 pop_back() - 与堆栈基本相同)


根据以下答案更新:

看起来 deque 通常实现的方式是固定大小数组的可变大小数组。这使得增长比向量(需要重新分配和复制)更快,所以对于像堆栈这样的东西,它都是关于添加和删除元素的,deque 可能是一个更好的选择。

priority_queue 需要大量索引,因为每次删除和插入都需要运行 pop_heap() 或 push_heap()。这可能使向量成为更好的选择,因为无论如何添加元素仍然是摊销常数。

0 投票
11 回答
34225 浏览

c++ - 在 Visual Studio 调试中检查 STL 容器

如果我有一个std::vectororstd::map变量,并且我想查看内容,那么在调试时看到第 n 个元素会很痛苦。是否有插件或一些技巧可以在调试时更轻松地查看 STL 容器变量(VS2003/2005/2008)

0 投票
18 回答
7805 浏览

c++ - 为什么在 c++ 中使用 c 字符串?

现在有什么好的理由在 C++ 中使用 C 字符串吗?我的教科书在某些时候在示例中使用了它们,我真的觉得使用 std::string 会更容易。

0 投票
22 回答
446654 浏览

c++ - 如何从 std::map 中检索所有键(或值)并将它们放入向量中?

这是我出来的可能方式之一:

当然,我们也可以通过定义另一个函子RetrieveValues从地图中检索所有值。

有没有其他方法可以轻松实现这一目标?(我一直想知道为什么 std::map 不包含一个成员函数供我们这样做。)

0 投票
6 回答
48192 浏览

c++ - 为什么将 std::auto_ptr<> 与标准容器一起使用是错误的?

为什么使用std::auto_ptr<>标准容器是错误的?

0 投票
9 回答
8630 浏览

c++ - 获取向量进入一个需要向量的函数

考虑这些类。

这个函数

最后是我的矢量图

我想传递derived给 function BaseFoo,但编译器不让我。我如何解决这个问题,而不将整个向量复制到 a std::vector<Base*>

0 投票
3 回答
2870 浏览

c++ - 指针和容器

我们都知道 RAW 指针需要包装在某种形式的智能指针中才能获得 Exception 安全的内存管理。但是当涉及到指针容器时,问题变得更加棘手。

std 容器坚持包含的对象是可复制的,因此这排除了 std::auto_ptr 的使用,尽管您仍然可以使用 boost::shared_ptr 等。

但也有一些 boost 容器明确设计用于安全地保存指针:
请参阅指针容器库

问题是:在什么情况下我应该更喜欢使用 ptr_containers 而不是 smart_pointers 容器?

0 投票
7 回答
2452 浏览

c++ - 内存占用最少的 STL 实现是什么?

我正在开发一个大量使用 STL 的超大规模计算库。该库正在使用 MSVC2003 构建,并且正在使用其 STL 实现。我正在寻找一种替代的 STL 实现,它可以帮助库降低其内存需求并提高其性能。

目前无法切换到更新版本的 MSVC。

如果可能的话,我希望得到一些关于不基于基准的实际使用情况的反馈。

编辑:为了让它更清楚一点,例如一些 STL 实现(如 STLSoft)正在为字符串连接提出特定的优化;这些可能听起来影响很小,但它们可以带来很大的改进。STLPort 是另一个很好的例子,他们清楚地说明了他们的目标:拥有最快的 STL 实现,有 stdlib++ 等......所有这些都可以是很好的候选者,但我没有时间测试它们,我需要一些社区帮助在那。

0 投票
2 回答
1370 浏览

visual-studio-2008 - Has anyone already done the work to make STLPort build with VS2008 and/or an x64 build with VS2005?

At present it seems that VS2008 still isn't supported either in the 5.1.5 release or in the STLPort CVS repository. If someone has already done this work then it would be useful to share, if possible :)

Likewise it would be useful to know about the changes required for a VS2005 or 2008 x64 build.