问题标签 [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.

0 投票
7 回答
51958 浏览

stl - 如何将 std::find/std::find_if 与自定义类对象向量一起使用?

我有一个代表用户的类Nick,我想std::find_if在它上面使用,我想在其中查找用户列表向量是否包含与我传入的相同用户名的对象。我尝试Nick为我要测试并重载== operator然后尝试find/find_if在对象上使用的用户名:

我已经重载了== operator所以比较 Nick == Nick2 应该可以工作,但是函数返回error C2678: binary '==' : no operator found which takes a left-hand operand of type 'Nick' (or there is no acceptable conversion).

这是我的尼克课程供参考:

0 投票
2 回答
272 浏览

c++ - istream_iterator 尝试解析无效数据

嗨,我希望有人能帮助理解以下代码的这种行为。

这行得通,但我有几个问题。在完成所有有效的迭代之后,它开始尝试解析另一个不可避免地失败的迭代(因此是if(!is.good())..._)。它试图解析它,但它永远不会将最终格式错误的结构传递给 lambda 表达式。为什么不呢?是不是因为流不好()所以它不会费心尝试传递它?

另外,我怎样才能让它甚至不费心尝试解析最终结构,(每个节都以换行符(0x0a)结尾,所以我认为忽略流直到换行符会导致最终有效迭代中的 EOF但事实并非如此。

感谢您的指导。

也可以随意传递另一个编码正确性评论。

PS:我的文件看起来像这样

0 投票
4 回答
1790 浏览

c++ - 如何从 C++ 数组中删除重复项?

我有一个结构数组;数组大小为 N。

我想从数组中删除重复项;也就是说,进行就地更改,将数组转换为每个结构的单一外观。此外,我想知道新的大小 M(缩减数组中的最高索引)。

结构包括原语,因此比较它们很简单。

我怎样才能在 C++ 中有效地做到这一点?

我已经实现了以下运算符:

但是,运行时出现错误:

这里有什么问题?

0 投票
1 回答
1646 浏览

c++ - 对向量c ++中的上限

我对对向量进行了排序,我试图获取对中向量之一的上界值,但它在位置 = 0 处给了我上界。

请多多包涵,我是 C++ 的新手,想学习。请帮助修复此代码。谢谢

0 投票
1 回答
102 浏览

multithreading - 为什么在 fill_n 中不调用移动构造函数

我得到的错误说fill_n下面的行正在尝试使用已删除的复制构造函数:为什么不尝试使用移动构造函数?我尝试将其包装在 a 中,std::move但这没有帮助。

但是,如果我将fill_n行更改为

效果很好。我认为这些与我之前在看起来有点相似的代码中从一个到另一个所做的更改基本相同。

0 投票
2 回答
2791 浏览

c++ - stdlib“唯一”方法不起作用

我正在尝试使用 C++ 标准库算法unique(带有BinaryPredicate)。

我创建了一个向量对;每对就像“(第一个= 4个双精度的向量,第二个=一个整数)”。第二个元素作为索引,所以在使用 `unique 之后,我仍然可以告诉原始索引。

在下面的示例中,我创建了如下内容:



现在我想使用 unique 函数只比较每对的第一个元素。我使用了自定义二进制预测器uniquepred。确实,它有效,但使用unique.

预期结果

实际结果

最小工作示例如下。请帮我调试一下。

0 投票
3 回答
1514 浏览

c++ - 快速排序迭代器要求

tl; dr:是否可以有效地在双向链表上实现快速排序?在考虑之前我的理解是,不,不是。

前几天我有机会考虑基本排序算法的迭代器要求。基本的 O(N²) 相当简单。

  • 冒泡排序 - 2 个前向迭代器会做得很好,一个接一个拖着。
  • 插入排序 - 2 个双向迭代器就可以了。一个用于乱序元素,一个用于插入点。
  • 选择排序 - 有点棘手,但前向迭代器可以解决问题。

快速排序

std::sort 中的 introsort_loop(如在 gnu 标准库/hp(1994)/silicon graphics(1996) 中)要求它是 random_access。

正如我所期待的那样。

现在经过仔细检查,我找不到需要快速排序的真正原因。唯一明确需要 random_access_iterators 的是std::__median需要计算中间元素的调用。常规的香草快速排序计算中位数。

分区包括一个检查

不是真正有用的双向检查。然而,人们应该能够用一个简单的条件来替换前一个分区旅行(从左到右/从右到左)中的检查

是否可以仅使用双向迭代器相当有效地实现快速排序?递归深度仍然可以被保护。

注意。我还没有尝试过实际的实现。

0 投票
3 回答
1149 浏览

c++ - STL算法删除容器中的所有对象?

是否有delete *the_object_iterator;对所有对象执行 STL 实用程序/算法?这样我就可以clear()安全了?STL 容器是 a set,对象是指向用 . 创建的 C++ 类的指针new

Boost似乎是最好的解决方案。我的目标是避免对不可复制的类进行复制构造。

0 投票
5 回答
1050 浏览

c++ - for_each usage in C++

Basically, I am trying to call the destructor for each Abstract object in the m_abs_list. This can be easily achieved by a for loop. But I am trying to used for_each in this context.

On compilation I get error:

How do i get around the compilation error ?

0 投票
2 回答
671 浏览

algorithm - 时间/空间复杂性降低。编程比赛

我在一个技能测试系统中发现了下一个编程问题:

给出一个正整数 N。考虑数字序列 [0, 1, ..., N]。这些数字的十进制表示中零的总数是多少?

N 可以非常大。因此,它以长度为 L 的非空字符串 S 的形式给出,其中包含 N 的十进制表示。S 不包含前导零。

写一个函数:

即,给定一个字符串 S,它是某个正整数 N 的十进制表示,返回数字 [0, 1, ..., N] 的十进制表示中零的总数。如果结果超过 1,410,000,016,则该函数应返回结果除以 1,410,000,017 的余数。

例如,对于 S="100",函数应该返回 12,对于 S="219",它应该返回 42。

假使,假设:

复杂:

我试图解决它并编写函数,但在我的解决方案中运行时间复杂度比 O(L) 更复杂,任何人都可以解决它(至少提供算法或伪代码或解释)?

好成功!