问题标签 [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.
c++ - 如何简化适配器方案?
为了说明清楚,我先贴出“如何使用”的代码:
AB.h:
主.cpp:
编译运行:
它确实有效,以通用的方式处理不同的 A 和 B,运行时开销很小,并且......简单明了......直到你看到 Node.h:
和 Node.cpp:
我真的觉得太复杂了,要实现这么简单的目标。(如果 A 和 B 有多个容器成员,例如学生/员工/门票,那简直就是地狱。) C++ 是为此设计的吗?我什至想到了一些返回基类引用而不是基类指针的奇怪想法。无论如何,我想问的是,有没有办法简化上面的代码?俗话说,“说话便宜,给我看代码”,在谈论任何哲学之前,我更喜欢看到可以直接编译和运行的代码,相同的输出,相同的简单使用方式,但降低了 Node.js 的复杂性。 h/cpp. 谢谢。
loops - 这两个基于范围的循环有什么区别
如果我使用下面的代码代替上面的代码,上面的代码现在不起作用,它工作得很好。Idk为什么会这样,请告诉我有什么区别。
c++ - C++ 使用 ranged for 迭代原始类型容器
用 ranged for (用于读取元素值)迭代原始类型容器的更好方法(性能)是什么 - 按 ref 或按值读取元素?
或者
想知道这 2 件事(通过 ref 和 value 传递和迭代)是否可能以某种方式相关。
另一个注意事项:我确实认识到通过 ref、const-ref 和 value 访问以及复制值之间有什么区别 - 我只对只读方式的性能更好感兴趣。
c++ - 只读范围基于
让我们考虑下面的例子(当然应该用 代替std::accumulate
):
如您所见,有许多不同的方法可以将基于范围的 for 循环用于小类型。请注意,所有这些变体在编译器资源管理器中使用gcc
.
我经常看到auto i
在第一种情况和auto const& i
第二种情况下使用的建议。
但我们正在与编译器而不是这里的人交谈。有趣的信息是变量只是输入。这不是由 表示的auto i
。
那么在只需要读取输入的任何情况下,使用auto const& i
而不是有任何性能劣势吗?auto i
c++ - 不期望向量的 C++ 输出元素
我正在练习矢量和范围 for 循环,我的代码:
我输入了 3,然后输入了 1、2、3,但输出为“0 0 0 1 2 3”。你能解释一下 0 是从哪里来的吗?非常感谢你!
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* 进行初始化时,最好知道发生了什么。添加星号对编译器有何重要意义?
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)}
c++ - 在基于范围的 for 循环中在 init 语句上使用属性是否合法?
例子:
这似乎在 GCC 和 Clang 上运行良好,但无法使用 MSVC 编译:https ://godbolt.org/z/reP5vPM6h并出现错误:
但由于某种原因,这在 MSVC 上编译得很好,尽管我认为它不合法:
python - 为什么我在 Python 中没有得到 333
即使我将范围更改为(total+1),我也一直得到 33。我必须做什么才能获得 333