问题标签 [ranged-loops]

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 投票
0 回答
44 浏览

c++ - 如何简化适配器方案?

为了说明清楚,我先贴出“如何使用”的代码:

AB.h:

主.cpp:

编译运行:

它确实有效,以通用的方式处理不同的 A 和 B,运行时开销很小,并且......简单明了......直到你看到 Node.h:

和 Node.cpp:

我真的觉得太复杂了,要实现这么简单的目标。(如果 A 和 B 有多个容器成员,例如学生/员工/门票,那简直就是地狱。) C++ 是为此设计的吗?我什至想到了一些返回基类引用而不是基类指针的奇怪想法。无论如何,我想问的是,有没有办法简化上面的代码?俗话说,“说话便宜,给我看代码”,在谈论任何哲学之前,我更喜欢看到可以直接编译和运行的代码,相同的输出,相同的简单使用方式,但降低了 Node.js 的复杂性。 h/cpp. 谢谢。

0 投票
1 回答
40 浏览

loops - 这两个基于范围的循环有什么区别

如果我使用下面的代码代替上面的代码,上面的代码现在不起作用,它工作得很好。Idk为什么会这样,请告诉我有什么区别。

0 投票
3 回答
123 浏览

c++ - C++ 使用 ranged for 迭代原始类型容器

用 ranged for (用于读取元素值)迭代原始类型容器的更好方法(性能)是什么 - 按 ref 或按值读取元素?

或者

有: 通过引用传递原始类型会适得其反吗?

想知道这 2 件事(通过 ref 和 value 传递和迭代)是否可能以某种方式相关。

另一个注意事项:我确实认识到通过 ref、const-ref 和 value 访问以及复制值之间有什么区别 - 我只对只读方式的性能更好感兴趣。

0 投票
3 回答
74 浏览

c++ - 只读范围基于

让我们考虑下面的例子(当然应该用 代替std::accumulate):

如您所见,有许多不同的方法可以将基于范围的 for 循环用于小类型。请注意,所有这些变体在编译器资源管理器中使用gcc.

我经常看到auto i在第一种情况和auto const& i第二种情况下使用的建议。

但我们正在与编译器而不是这里的人交谈。有趣的信息是变量只是输入。这不是由 表示的auto i

那么在只需要读取输入的任何情况下,使用auto const& i而不是有任何性能劣势吗?auto i

0 投票
2 回答
53 浏览

c++ - 不期望向量的 C++ 输出元素

我正在练习矢量和范围 for 循环,我的代码:

我输入了 3,然后输入了 1、2、3,但输出为“0 0 0 1 2 3”。你能解释一下 0 是从哪里来的吗?非常感谢你!

0 投票
2 回答
80 浏览

c++ - c++ 在具有多向数组的范围循环中初始化变量

我是第一次学习c++(我是从python过渡的)

当我尝试使用多维数组处理和编译范围循环时,我看到了一些奇怪的行为。考虑以下情况:

如果 dataType 为 const int* row,则 row 成为指针(其元素)不能被修改。这是意料之中的。

输出:int const * __ptr64

如果 dataType 为 const auto row,则 row 成为可以修改的指针。无论您是否尝试修改代码中的行,编译器都会忽略您将行设为常量变量的请求。

输出:int * __ptr64

在上述情况下,我可以修改行的内容而不会出现任何错误。

如果在 auto 之后添加星号,您现在将获得一个常量变量。您需要同时输入 const 并加上星号以使其保持不变。

输出:int const * __ptr64

现在,如果我们使用 & 运算符而不是星号,则行将变为大小为 3 的数组。在这里,& 没有修改地址或任何东西,我找不到强制编译器复制内部数组并放入的方法它在新地址的行内。这只是使使用嵌套范围循环变得更容易。

输出:int [3]

但是现在,我不能手动告诉编译器创建一个数组。输入类似 int row[3] 的内容甚至不会被编译。获取数组的唯一方法是使用 auto&

CompilerError E0144:“int*”类型的值不能用于初始化“int[3]”类型的实体

CompilerError E0144:“int*”类型的值不能用于初始化“int[3]”类型的实体

CompilerError E0251:不允许引用数组

我喜欢在我的代码中使用嵌套的范围循环,这是我在使用 python 时养成的习惯。它使代码更容易编写、阅读并且更不容易出错。为了可读性和调试,我想要一种方法来强制我的编译器将行初始化为数组,而不是使用 auto& 并让编译器决定它想要数组的数据类型。

另外,我想要一种在另一个地址获取行的深层副本的方法,这样我就可以在不更改原始数组的情况下修改循环内的内容。对于一维循环,省略 & 运算符将在不同地址复制数据,但对于多维数组,它始终是相同的地址。

当您使用 const auto 而不是 const auto* 进行初始化时,最好知道发生了什么。添加星号对编译器有何重要意义?

0 投票
1 回答
16 浏览

python - 在列表中查找频率的代码。带有计数功能的第二个代码工作得很好,但是使用循环的第一个方法不起作用,为什么?

此代码没有给出正确的输出,如下所示: {('m', 2), ('m', 1), ('b', 1), ('p', 3), ('b ', 0), ('p', 2), ('b', 3), ('m', 0), ('m', 3), ('b', 2), ('p', 1)}

此代码给出正确的输出,如下所示: {('m', 2), ('p', 2), ('b', 3)}

0 投票
0 回答
61 浏览

c++ - 在基于范围的 for 循环中在 init 语句上使用属性是否合法?

例子:

这似乎在 GCC 和 Clang 上运行良好,但无法使用 MSVC 编译:https ://godbolt.org/z/reP5vPM6h并出现错误:


但由于某种原因,这在 MSVC 上编译得很好,尽管我认为它不合法:

链接:https ://godbolt.org/z/snv7Tqahh

0 投票
2 回答
43 浏览

python - 为什么我在 Python 中没有得到 333

即使我将范围更改为(total+1),我也一直得到 33。我必须做什么才能获得 333