问题标签 [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 投票
15 回答
238770 浏览

c++ - 为什么 C++ STL 不提供任何“树”容器?

为什么 C++ STL 不提供任何“树”容器,而最好使用什么?

我想将对象的层次结构存储为树,而不是使用树作为性能增强...

0 投票
6 回答
10551 浏览

c++ - 如何用非平凡的初始值填充向量?

我知道如何用非平凡的初始值填充 std::vector,例如序列号:

但这是一个for循环。有没有一种优雅的方法可以使用 stl 功能(而不是使用 Boost)用更少的代码行来做到这一点?

0 投票
2 回答
2074 浏览

c++ - std::list 的部分排序

我有一个链接列表,我想对其进行排序,例如:

std::sort 需要随机访问迭代器,因此这种方法不起作用。有一个专门化的 std::list::sort,但它只能对整个列表进行排序。我认为我没有足够的权限访问列表成员来自己写一些东西。

有没有办法做到这一点而不改变,比如说,矢量?

0 投票
10 回答
1300 浏览

c++ - C++ STL:容器重新创建还是清除后重用?

在编程中,我们面临需要使用中间 STL 容器的各种情况,如下例所示:

或者

考虑到 C++ 编译器的现状,哪种方法在时间和空间复杂度方面更好?

0 投票
3 回答
1430 浏览

c++ - 什么是非空 STL 擦除的安全等价物?

假设我有一个 hash_map 和一个类似的代码

但是 GCC 的 STL 不会在擦除时返回迭代器,而是一个 void。现在是这样的代码

安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个 hash_map。

0 投票
4 回答
4448 浏览

c++ - 在已排序的 STL 容器中查找给定键的“最佳匹配键”

问题

我有时间戳数据,我需要根据时间戳进行搜索,以便获得与我的输入时间戳最接近的一个现有时间戳。
最好用 STL 解决这个问题。boost::* 或 stl::tr1::* (来自带有 Featurepack 的 VS9)也是可能的。
时间戳数据示例:

使用stl::vector,sort()equal_range()

由于 a maporset只允许我找到完全匹配,因此我不再使用其中一个。所以现在我有一个vector我在数据进入时追加数据的地方。在搜索之前,我使用<algorithm>'ssort()并为其提供自定义比较功能。
之后,我使用<algorithm>'sequal_range()查找指定值的两个邻居x。从这两个值中,我检查哪一个最接近x,然后我有我的最佳匹配。


虽然这不是太复杂,但我想知道是否有更优雅的解决方案。
也许 STL 已经有一个算法可以做到这一点,所以我不会在这里重新发明一些东西?

更新:线性与二进制搜索

我忘了提到我有很多数据要处理,所以我不想线性搜索。
我对向量进行排序的原因sort()是它具有随机访问迭代器,而map. 使用 amap不允许equal_range()进行具有两倍对数复杂度的搜索。
我对么?

0 投票
6 回答
3609 浏览

c++ - std::for_each 中的多态函子

我正在尝试使用 stl 算法 for_each 而不会在我的代码中增加模板。std::for_each 想要按值实例化 MyFunctor 类,但它不能因为它的抽象。我创建了一个仿函数适配器类,它传递一个指针,然后在适当的时候取消引用它。

我的问题:

STL 或 Boost 是否已经有这样的适配器类?我不想重新发明轮子!

干杯,

戴夫

0 投票
7 回答
8871 浏览

c++ - 在哪里可以查找 C++ STL 中向量的 size_type 定义?

将我的向量size()函数的结果转换为unsigned int. 不过,我怎么能确定呢?我的文档不清楚如何size_type定义。

0 投票
7 回答
25303 浏览

c++ - list::size() 真的是 O(n) 吗?

最近,我注意到有人提到它std::list::size()具有线性复杂性。
根据一些 消息来源,这实际上取决于实现,因为标准没有说明复杂性必须是什么。此博客条目中
的评论说:

实际上,这取决于您使用的是哪个 STL。Microsoft Visual Studio V6 将 size() 实现为 {return (_Size); } 而 gcc(至少在 3.3.2 和 4.1.0 版本中)将其作为 { return std::distance(begin(), end()); 第一个具有恒定速度,第二个具有 o(N) 速度

  1. 所以我的猜测是,对于 VC++ 人群来说size(),复杂性是恒定的,因为 Dinkumware 自 VC6 以来可能不会改变这一事实。我在吗?
  2. 它现在看起来像什么gcc?如果真的是O(n),为什么开发者会选择这样做呢?
0 投票
2 回答
569 浏览

c++ - 将自定义函子与 std::generate_n() 算法一起使用的正确方法?

以下代码在 XPSP3 上的 VC++ 8 下正确编译,但运行它会导致运行时错误。

我的标题看起来像:

我的实现看起来像:

这编译得很好,它会生成一个异常(不是头文件中定义的 logic_error 异常)。

如果我将实现更改为使用函数而不是仿函数,它将起作用:

在这里使用仿函数有什么问题?