问题标签 [stl-algorithm]
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++ - std::back_inserter 需要旧 GCC 上的 const_reference。为什么?
我目前正在研究一些可以在较新版本的 GCC 上编译但不能在旧版本上编译的代码。在我的情况下,我使用从一个数据结构到自定义数据结构的一些数据std::back_inserter
。std::copy
但是,如果我忘记了typedef value_type & const_reference
这个自定义数据结构中的 typedef,这将不会在 GCC 4.4 上编译。相同的代码在 GCC 4.5 上编译并运行得很好。
这两个编译器版本之间有什么区别,这使得代码可以在一个版本上编译,但不能在另一个版本上编译。我猜想这与 C++11 的实现有关,在 GCC 4.4 中它的完成度要低得多。decltype
我猜可能是带有或另一个新的 C++11 关键字的东西。
如果我在std::back_inserter
不定义const_reference
类型的情况下使用,这段代码是否正确?我通常认为必须实现全套 typedef ( value_type
,reference
等const_reference
) 才能与 STL 算法库兼容?或者我可以安全地假设如果我的代码在这种情况下编译,我没有调用任何危险的东西(例如移动语义,这会破坏我的其他数据结构)。
algorithm - LCS 算法(示例)
有一种动态规划算法可以找到两个序列的最长公共子序列。如何找到两个序列 X 和 Y 的 LCS 算法。(正确性测试)
c++ - 如何在少于 O(n) 的时间内在 std::set 中选择一个随机元素?
这个问题有一个额外的限制。
我愿意允许不统一的选择,只要它不是片面的。
鉴于“集合通常实现为二叉搜索树”并且我希望它们将包含某种深度或大小信息以进行平衡,我希望您可以对树进行某种加权随机游走。但是我不知道有任何远程便携的方式来做到这一点。
编辑:约束不适用于摊销时间。
c++ - 在 C++ 中为包含数组的对象编写自定义 std::set 比较器
我试图在这里让我的问题变得简单。我有一个以 int 数组作为成员变量的结构。
我想将 elem 指针放入 std::set 中,并且稍后我想使用 find() 从该集合中搜索特定对象,因此我想为此 std::set 提供自定义比较器。
你能帮我解释比较器的逻辑吗?任何大小的数组是否有任何通用逻辑?
c++ - 从容器中元素的成员函数累积结果
我有一个类,它有一个返回计数的函数,如下所示:
在我的程序的某个地方,我有一个该类对象的向量。我有一个函数来获取总计数(CTestClass::GetCount() 的结果总和),像普通循环一样实现:
我想重构它以使用标准库中可用的工具,我想到了accumulate
. 我已经能够通过使用函数对象(简单)来做到这一点,但我几乎可以肯定它可以在不声明另一个对象的情况下完成(我没有 C++11 或 boost,所以没有 lambda,但我有 TR1)。
在寻找答案时,我找到了这些资源,但它们并没有解决问题:
- 这几乎是同一个问题,提供的答案是循环、累加和仿函数、累加和 lambda,但对 bind 等有未回答的引用。
- 这个对类似问题的回答使用
accumulate
,plus
和bind
, 但使用数据成员而不是成员函数。
那么,有没有办法使用绑定或类似的东西来做到这一点?
c++ - STL 排序未按预期工作
我觉得好像我正确地使用了它,但编译器却有不同的感觉。我正在尝试使用 stl 排序算法在我的 sort_by_name 函数中按字母顺序对课程列表进行排序。这大致是我写的:
错误:
提前感谢您的帮助。
c++ - std::set 与自定义类型的区别
我已经定义了自己的结构,例如
我正在使用它std::set
。我想使用算法(就像在上一个问题set_difference
中已经提到的那样来确定两组的差异。当我尝试调用代码时,编译停止并显示以下错误消息:
一个最小的示例可能如下所示:
c++ - 从结构访问数据时,运算符重载在哪里?
我在结构中有一个函数,可以对结构中的向量进行排序。但是要比较向量中的两个元素,我需要同一个结构中另一个变量的值。我想知道我应该在哪里保留运算符重载或比较函数才能使这种工作正常工作。我在下面的粘贴中给出了一个示例。
这当然行不通。我已经为比较功能尝试了许多其他签名和范围,但似乎没有任何效果。
知道可以在这里做什么吗?
c++ - std::copy 钩子
假设我正在使用std::copy
类似的功能std::remove_if
,......添加钩子的最佳方法是什么?特别是我想记录复制的状态。最后我想要的东西相当于:
但使用std::copy
c++ - 使用 std::set_symmetric_difference 时基于 std::map<>::value_type 的 STL 容器模板类型
给定两个 std::map 实例,我正在尝试使用 std::set_set_symmetric_difference() 算法来存储所有差异。我有以下工作代码:
这打印出我的期望:
让我烦恼的是 MyPairs 的 typedef,与地图的差异向量。
最初我尝试对向量进行类型定义,就像typedef std::vector< MyMap::value_type > MyPairs
我遇到以下错误一样,该错误在Non-static const member 的接受答案中描述,不能使用默认赋值运算符
这是因为映射中值的键是 const 以避免更改键并使映射无效,这是有意义的。因为std::map<Key,Value>::value_type
意义不能用于向向量添加元素,这就是为什么在我的工作示例中不指定 const 的原因std::pair<const Key, Value>
。operator=()
有没有更好的方法来为 MyPairs 向量定义非冗余的模板参数?到目前为止我能想到的最好的就是std::vector< std::pair<MyMap::key_type, MyMap::mapped_type> >