如何在 D 中生成数组?

发布于 2024-12-03 23:49:54 字数 253 浏览 1 评论 0原文

我有这个 c++11 代码:

auto gen = []() -> double { /* do stuff */ };
std::generate(myArray.begin(), myArray.end(), gen);

我如何对 D 的数组做同样的事情? std.algorithm.fill 不接受函数对象,而且我不知道如何将函数传递给recurrence

I have this c++11 code:

auto gen = []() -> double { /* do stuff */ };
std::generate(myArray.begin(), myArray.end(), gen);

How would I do the same with D's array? std.algorithm.fill doesn't take a function object, and I don't know how to pass a function to recurrence.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伊面 2024-12-10 23:49:54

这是一个似乎有效的版本:

import std.algorithm, std.array, std.range, std.stdio;

void main() {
  writefln("%s", __VERSION__);
  int i;
  auto dg = delegate float(int) { return i++; };
  float[] res = array(map!dg(iota(0, 10)));
  float[] res2 = new float[10];
  fill(res2, map!dg(iota(0, res2.length)));
  writefln("meep");
  writefln("%s", res);
  writefln("%s", res2);
}

[编辑]添加了基于填充的版本(res2)。

我在 Ideone (http://www.ideone.com/DFK5A) 中测试了它,但它崩溃了。一位使用当前版本 DMD 的朋友说它可以工作,所以我认为 Ideone 的 DMD 已经过时了大约有十到二十个版本。

Here's a version that seems to work:

import std.algorithm, std.array, std.range, std.stdio;

void main() {
  writefln("%s", __VERSION__);
  int i;
  auto dg = delegate float(int) { return i++; };
  float[] res = array(map!dg(iota(0, 10)));
  float[] res2 = new float[10];
  fill(res2, map!dg(iota(0, res2.length)));
  writefln("meep");
  writefln("%s", res);
  writefln("%s", res2);
}

[edit] Added fill-based version (res2).

I tested it in Ideone (http://www.ideone.com/DFK5A) but it crashes .. a friend with a current version of DMD says it works though, so I assume Ideone's DMD is just outdated by about ten to twenty versions.

兔姬 2024-12-10 23:49:54

您可以执行类似的操作,

auto arr = {/* generate an array and return that array */}();

如果将其分配给全局变量,则应在编译时对其进行评估。

您还可以使用字符串混合来生成数组文字的代码。

You could do something like

auto arr = {/* generate an array and return that array */}();

If it's assigned to a global it should be evaluated at compile-time.

You can also use string mixins to generate code for an array literal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文