问题标签 [for-range]

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 投票
3 回答
2756 浏览

c++ - c++中基于范围的for循环

似乎 C++11 中可用的“for each”语法风格允许数组迭代,而不需要知道数组的实际大小(元素数量)。我假设,因为它是新标准的一部分,所以这是完全安全的,即使对于 C 数组也是如此。通常,您还必须在操作之前单独知道 C 数组的大小,但我希望任何使用过这种新 C++ 技术的人验证它的工作方式完全符合您的预期:

关于这种技术的非明显副作用或缺点,我有什么需要了解的吗?它在我看到的代码中没有显示太多,可能是因为大多数代码都是在标准中之前编写的。想确保它的罕见用法不是因为其他一些不为人知的原因。

0 投票
1 回答
4863 浏览

loops - 按顺序范围循环映射

我正在寻找一种确定的方式来确定Go map有序范围。

Golang 规范声明如下:

未指定映射的迭代顺序,并且不保证从一次迭代到下一次迭代是相同的。如果在迭代过程中删除了尚未到达的映射条目,则不会产生相应的迭代值。如果在迭代期间创建了映射条目,则该条目可能在迭代期间产生或可能被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能会有所不同。如果 map 为 nil,则迭代次数为 0。

我在 StackOverflow 和谷歌上找到的所有东西都是我不喜欢的(恕我直言)解决方法。

有没有一种可靠的方法来遍历地图并按照插入的顺序检索项目?

我找到的解决方案是:

  • 在两个单独的切片中跟踪键和值:这听起来像“不要使用地图”,失去了使用地图的所有优势。

  • 使用映射但跟踪不同切片中的键:这意味着数据重复可能导致数据错位并最终可能带来大量错误和痛苦的调试。

你有什么建议?


编辑以响应可能的重复标志。

我的问题和提供的问题(这个问题,还有这个问题)之间存在细微差别,这两个问题都要求按照键字典顺序循环遍历地图;相反,我特别问:

有没有一种可靠的方法来遍历地图并按照插入的顺序检索项目

这不是字典顺序的,因此与@gramme.ninja问题不同:

我怎样才能让键按顺序排列/对地图进行排序,以便键按顺序排列并且值对应?

0 投票
1 回答
74 浏览

c++11 - C++11 中范围的字面量

如果我有这个:

我可以使用新for range方法吗?

我知道对于容器,他们需要一种begin方法end才能工作。但是,如果我们有文字最大值?

0 投票
0 回答
45 浏览

for-loop - boostcounting_range 不包括迭代最后一个值

我有这个代码:

请注意我分别设置为0 - 61 - 12for的循环。我发现它们必须是0 - 71 - 13。它迭代最后一个数字,它不包括最后一个数字本身!

所以这是误导:

http://www.boost.org/doc/libs/1_63_0/libs/range/doc/html/range/reference/ranges/counting_range.html

请确认。

0 投票
1 回答
113 浏览

for-loop - 字符串切片的范围不一致

这段代码:

产生输出“cc c”,而这段代码:

产生输出“[abc]”

第一个建议 for range 迭代引用(它不应该),第二个建议它迭代值的副本(它应该)。

为什么第一个不产生输出“ab c”?

0 投票
2 回答
3387 浏览

c++ - 临时范围上的基于范围的 for 循环

由于 valgrind 中的一些分段错误和警告,我发现这段代码不正确,并且在 for-range 循环中有某种悬空引用。

看起来好像beginend是从一个临时的并且丢失在循环中的。

当然,一种解决方法是

但是,我想知道为什么for(auto e : f()[5])会出现错误,以及是否有更好的方法或某种设计方法,f甚至是容器(std::vector)来避免这种陷阱。

使用迭代器循环更清楚为什么会发生这个问题(begin并且end来自不同的临时对象)

但在 for-range 循环中,如第一个示例所示,似乎很容易犯此错误。

0 投票
0 回答
299 浏览

c++ - 基于范围的循环或执行策略更好的 for_each?

我在 cppreference.com 上阅读了 C++17 中的那些新执行策略:https ://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t

我想知道如果我们想让编译器尽可能地优化,我们是否应该更喜欢那些现在而不是基于范围的循环?我正在使用尚未实现它们的 gcc,所以我无法对其进行测试,但对于未来我应该更喜欢这个:

或这个:

0 投票
1 回答
189 浏览

c++ - 为什么这个 const auto 变量在 range-for 循环中为类的 const 成员函数编译?

我有以下类声明,根据我所学到的与 const 成员函数相关的内容,const 对象不能调用非 const 成员函数。在 range-for 循环中,我们使用的是“const auto animal”,假设它使用了一个 const 对象,所以我认为 const 对象在调用非 const 成员函数 speak() 时应该给出编译错误,但是它实际编译,为什么?,也许我不清楚 range-for 循环是如何工作的......谢谢!

0 投票
1 回答
275 浏览

c++ - 在基于范围的 for 循环期间插入 std::list 的后面

我遇到了“在基于范围的循环 c++11 期间将元素添加到向量中std::vector”,并且由于附加会使迭代器无效,因此不允许使用它并不奇怪。但是,插入std::list不会使任何迭代器无效,所以我想知道是否允许使用std::list而不是std::vector.

例如

它似乎编译得很好,但我担心它是未定义的行为。

0 投票
1 回答
115 浏览

c++ - 有人可以为我解释一下 C++ 代码吗?

在下面的代码中,冒号是什么意思?回调函数从何而来?