问题标签 [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.
c++ - 为什么 C++ STL 不提供任何“树”容器?
为什么 C++ STL 不提供任何“树”容器,而最好使用什么?
我想将对象的层次结构存储为树,而不是使用树作为性能增强...
c++ - 如何用非平凡的初始值填充向量?
我知道如何用非平凡的初始值填充 std::vector,例如序列号:
但这是一个for循环。有没有一种优雅的方法可以使用 stl 功能(而不是使用 Boost)用更少的代码行来做到这一点?
c++ - std::list 的部分排序
我有一个链接列表,我想对其进行排序,例如:
std::sort 需要随机访问迭代器,因此这种方法不起作用。有一个专门化的 std::list::sort,但它只能对整个列表进行排序。我认为我没有足够的权限访问列表成员来自己写一些东西。
有没有办法做到这一点而不改变,比如说,矢量?
c++ - C++ STL:容器重新创建还是清除后重用?
在编程中,我们面临需要使用中间 STL 容器的各种情况,如下例所示:
或者
考虑到 C++ 编译器的现状,哪种方法在时间和空间复杂度方面更好?
c++ - 什么是非空 STL 擦除的安全等价物?
假设我有一个 hash_map 和一个类似的代码
但是 GCC 的 STL 不会在擦除时返回迭代器,而是一个 void。现在是这样的代码
安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个 hash_map。
c++ - 在已排序的 STL 容器中查找给定键的“最佳匹配键”
问题
我有时间戳数据,我需要根据时间戳进行搜索,以便获得与我的输入时间戳最接近的一个现有时间戳。
最好用 STL 解决这个问题。boost::* 或 stl::tr1::* (来自带有 Featurepack 的 VS9)也是可能的。
时间戳数据示例:
使用stl::vector
,sort()
和equal_range()
由于 a map
orset
只允许我找到完全匹配,因此我不再使用其中一个。所以现在我有一个vector
我在数据进入时追加数据的地方。在搜索之前,我使用<algorithm>
'ssort()
并为其提供自定义比较功能。
之后,我使用<algorithm>
'sequal_range()
查找指定值的两个邻居x
。从这两个值中,我检查哪一个最接近x
,然后我有我的最佳匹配。
虽然这不是太复杂,但我想知道是否有更优雅的解决方案。
也许 STL 已经有一个算法可以做到这一点,所以我不会在这里重新发明一些东西?
更新:线性与二进制搜索
我忘了提到我有很多数据要处理,所以我不想线性搜索。
我对向量进行排序的原因sort()
是它具有随机访问迭代器,而map
. 使用 amap
不允许equal_range()
进行具有两倍对数复杂度的搜索。
我对么?
c++ - std::for_each 中的多态函子
我正在尝试使用 stl 算法 for_each 而不会在我的代码中增加模板。std::for_each 想要按值实例化 MyFunctor 类,但它不能因为它的抽象。我创建了一个仿函数适配器类,它传递一个指针,然后在适当的时候取消引用它。
我的问题:
STL 或 Boost 是否已经有这样的适配器类?我不想重新发明轮子!
干杯,
戴夫
c++ - 在哪里可以查找 C++ STL 中向量的 size_type 定义?
将我的向量size()
函数的结果转换为unsigned int
. 不过,我怎么能确定呢?我的文档不清楚如何size_type
定义。
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) 速度
- 所以我的猜测是,对于 VC++ 人群来说
size()
,复杂性是恒定的,因为 Dinkumware 自 VC6 以来可能不会改变这一事实。我在吗? - 它现在看起来像什么
gcc
?如果真的是O(n),为什么开发者会选择这样做呢?
c++ - 将自定义函子与 std::generate_n() 算法一起使用的正确方法?
以下代码在 XPSP3 上的 VC++ 8 下正确编译,但运行它会导致运行时错误。
我的标题看起来像:
我的实现看起来像:
这编译得很好,它会生成一个异常(不是头文件中定义的 logic_error 异常)。
如果我将实现更改为使用函数而不是仿函数,它将起作用:
在这里使用仿函数有什么问题?