问题标签 [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++ - 在 Shutting Yard 中处理带括号的表达式
我有以下手写循环来处理带括号的表达式:
(output
并且punctuators
都是 type std::vector<token>
,其中token
是一个非常简单struct
的,由 achar kind
和一个unsigned value
数据成员组成。)
我想知道从手写循环切换到算法是否会提高可读性:
但不知何故,我觉得这段代码的可读性差了很多,可能是由于使用了反向迭代器,尤其是转换为普通迭代器。有更好的解决方案吗?您是否同意手写循环更具可读性,或者我只是在算法方面还没有看到光明?
c++ - std::next_permutation 实现说明
我很好奇是如何std:next_permutation
实现的,所以我提取了gnu libstdc++ 4.7
版本并清理了标识符和格式以生成以下演示......
输出如预期:http: //ideone.com/4nZdx
我的问题是:它是如何工作的?和的含义是i
什么?它们在执行的不同部分有什么价值?证明其正确性的草图是什么?j
k
很明显,在进入主循环之前,它只检查琐碎的 0 或 1 元素列表案例。在主循环的入口处,我指向最后一个元素(不是一个过去的结尾),并且列表至少有 2 个元素长。
主循环的主体中发生了什么?
c++ - 使用 copy 和 back_inserter 将向量附加到自身时出现错误的结果
受这个问题的启发,询问如何将向量附加到自身,我的第一个想法是以下(是的,我现在意识到insert
这是一个更好的选择):
但是,这会打印:
每次运行程序时,* 都是不同的数字。只有 2 被替换的事实很奇特,如果真的有对此的解释,我很想听听。继续,如果我附加到不同的向量(原始的副本),它会正确输出。如果我在一行之前添加以下行,它也会正确输出copy
:
我的印象std::back_inserter
是一种将元素添加到容器末端的安全方法,尽管事先没有保留内存。如果我的理解是正确的,复制线有什么问题?
我认为这与编译器无关,但我使用的是 GCC 4.7.1。
c++ - 如何将函数应用于地图的每个值以创建排序序列?
在 C++ 中使用 STL,我将如何将函数应用于 a 中的每个值std::map
以获取std::string
(值的打印表示)并将std::string
(s) 收集到一个集合中,该集合由来自另一个函数的浮点键排序应用于地图中的每个对应值?
换句话说,我想遍历映射中的键值对并创建一组新的键值对,其中新键和值是旧值的函数。
但是,请不要使用 C++11。
c++ - 为什么 remove_copy_if 返回一个空向量?
您能否向我解释一下我在以下代码中做错了什么?我希望第二个向量中的值> = 80,但它是空的。
c++ - 将 emplace 与 std::fill 等算法一起使用
我使用vector::emplace_back
它是为了避免在填充向量时构造时间对象。这里有一个简化版本:
但我想std::fill_n
改用:
但是,通过这种方式,将创建临时副本。我不知道如何emplace
在这种情况下使用。我想我需要类似的东西std::back_emplacer
,但我找不到这样的东西。那是 C++11 的一部分,但还没有在 GCC 中实现吗?如果它不是 C++11 的一部分,还有其他方法吗?
c++ - 如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?
我有一个整数数组,我需要从中删除重复项,同时保持每个整数第一次出现的顺序。我可以看到这样做,但想象有更好的方法可以更好地利用 STL 算法?插入超出了我的控制范围,因此我无法在插入之前检查重复项。
使用 STL 算法如何做到这一点?
c++ - std::sort 在指针的 std:vector 上失败
以下代码在对向量进行排序时崩溃。
为什么会这样?
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>
私处的方法。