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

c++ - 在 Shutting Yard 中处理带括号的表达式

我有以下手写循环来处理带括号的表达式:

output并且punctuators都是 type std::vector<token>,其中token是一个非常简单struct的,由 achar kind和一个unsigned value数据成员组成。)

我想知道从手写循环切换到算法是否会提高可读性:

但不知何故,我觉得这段代码的可读性差了很多,可能是由于使用了反向迭代器,尤其是转换为普通迭代器。有更好的解决方案吗?您是否同意手写循环更具可读性,或者我只是在算法方面还没有看到光明?

0 投票
5 回答
32129 浏览

c++ - std::next_permutation 实现说明

我很好奇是如何std:next_permutation实现的,所以我提取了gnu libstdc++ 4.7版本并清理了标识符和格式以生成以下演示......

输出如预期:http: //ideone.com/4nZdx

我的问题是:它是如何工作的?和的含义是i什么?它们在执行的不同部分有什么价值?证明其正确性的草图是什么?jk

很明显,在进入主循环之前,它只检查琐碎的 0 或 1 元素列表案例。在主循环的入口处,我指向最后一个元素(不是一个过去的结尾),并且列表至少有 2 个元素长。

主循环的主体中发生了什么?

0 投票
1 回答
1587 浏览

c++ - 使用 copy 和 back_inserter 将向量附加到自身时出现错误的结果

这个问题的启发,询问如何将向量附加到自身,我的第一个想法是以下(是的,我现在意识到insert这是一个更好的选择):

但是,这会打印:

每次运行程序时,* 都是不同的数字。只有 2 被替换的事实很奇特,如果真的有对此的解释,我很想听听。继续,如果我附加到不同的向量(原始的副本),它会正确输出。如果我在一行之前添加以下行,它也会正确输出copy

我的印象std::back_inserter是一种将元素添加到容器末端的安全方法,尽管事先没有保留内存。如果我的理解是正确的,复制线有什么问题?

我认为这与编译器无关,但我使用的是 GCC 4.7.1。

0 投票
6 回答
639 浏览

c++ - 对动态大小的对象进行排序

0 投票
2 回答
1168 浏览

c++ - 如何将函数应用于地图的每个值以创建排序序列?

在 C++ 中使用 STL,我将如何将函数应用于 a 中的每个值std::map以获取std::string(值的打印表示)并将std::string(s) 收集到一个集合中,该集合由来自另一个函数的浮点键排序应用于地图中的每个对应值?

换句话说,我想遍历映射中的键值对并创建一组新的键值对,其中新键和值是旧值的函数。

但是,请不要使用 C++11。

0 投票
2 回答
415 浏览

c++ - 为什么 remove_copy_if 返回一个空向量?

您能否向我解释一下我在以下代码中做错了什么?我希望第二个向量中的值> = 80,但它是空的。

0 投票
6 回答
6454 浏览

c++ - 将 emplace 与 std::fill 等算法一起使用

我使用vector::emplace_back它是为了避免在填充向量时构造时间对象。这里有一个简化版本:

但我想std::fill_n改用:

但是,通过这种方式,将创建临时副本。我不知道如何emplace在这种情况下使用。我想我需要类似的东西std::back_emplacer,但我找不到这样的东西。那是 C++11 的一部分,但还没有在 GCC 中实现吗?如果它不是 C++11 的一部分,还有其他方法吗?

0 投票
8 回答
29713 浏览

c++ - 如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?

我有一个整数数组,我需要从中删除重复项,同时保持每个整数第一次出现的顺序。我可以看到这样做,但想象有更好的方法可以更好地利用 STL 算法?插入超出了我的控制范围,因此我无法在插入之前检查重复项。

使用 STL 算法如何做到这一点?

0 投票
1 回答
3109 浏览

c++ - std::sort 在指针的 std:vector 上失败

以下代码在对向量进行排序时崩溃。

为什么会这样?

0 投票
4 回答
3835 浏览

c++ - std::fill、std::copy 是否专门用于 std::vector?

在考虑这个问题时,我开始怀疑std::copy()和/或std::fill是否专门(我的意思是优化)std::vector<bool>.

这是 C++ 标准所要求的,还是 C++ 标准库供应商常用的方法?

简单来说,不知道是不是下面的代码:

在任何方面都比这更好/不同:

非常严格 - 可以说:std::fill<std::vector<bool>::iterator>()进入内部表示std::vector<bool>并设置它们的整个字节而不是单个位?我认为交std::fill朋友std::vector<bool>对图书馆供应商来说不是一个大问题?

[更新]

std::vector<bool>下一个相关问题:如果还没有专门化,我(或其他任何人:)可以专门化这样的算法吗?这是 C++ 标准允许的吗?我知道这将是不可移植的 - 但仅适用于一个选定的标准 C++ 库?假设我(或其他任何人)找到了接触std::vector<bool>私处的方法。