可变参数嵌套循环

2023-11-24

我正在研究 N 维网格。
我想根据任何维度(2D、3D、4D 等)生成嵌套循环。
我怎样才能以优雅而快速的方式做到这一点?下面是我的问题的简单说明。 我正在用 C++ 编写,但我认为此类问题对于其他语言也很有用。
我需要知道我的 do stuff 部分中的索引 (i,j,k...)。 编辑:lower_bound 和 upper_bound 代表网格中的索引,因此它们始终为正值。

#include <vector>

int main()
{
    // Dimension here is 3D
    std::vector<size_t> lower_bound({4,2,1});
    std::vector<size_t> upper_bound({16,47,9});

    for (size_t i = lower_bound[0]; i < upper_bound[0]; i ++)
        for (size_t j = lower_bound[1]; j < upper_bound[1]; j ++)
            for (size_t k = lower_bound[2]; k < upper_bound[2]; k ++)
                // for (size_t l = lower_bound[3]; l < upper_bound[3]; l ++)
                //  ...
                {
                    // Do stuff such as
                    grid({i,j,k}) = 2 * i + 3 *j - 4 * k;
                    // where grid size is the total number of vertices
                }
}

以下可能有帮助:

bool increment(
    std::vector<int>& v,
    const std::vector<int>& lower,
    const std::vector<int>& upper)
{
    assert(v.size() == lower.size());
    assert(v.size() == upper.size());

    for (auto i = v.size(); i-- != 0; ) {
        ++v[i];
        if (v[i] != upper[i]) {
            return true;
        }
        v[i] = lower[i];
    }
    return false;
}

并以这种方式使用它:

int main() {
    const std::vector<int> lower_bound({4,2,1});
    const std::vector<int> upper_bound({6,7,4});
    std::vector<int> current = lower_bound;

    do {
        std::copy(current.begin(), current.end(), std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    } while (increment(current, lower_bound, upper_bound));
}

现场演示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可变参数嵌套循环 的相关文章

  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • ResourceDictionary 源中的 Uri 语法(通用 Windows 平台)

    我正在迁移我的Windows 8 1项目到Windows 10 通用 Windows 平台 这时我被拦住了ResourceDictionary改变在UWP 为了简单起见 我有包含 2 个项目的 Windows 8 1 解决方案 App pr
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 锁定文件的一个块

    我有一个大小为 192k 的文件 我想锁定文件的中间部分 例如 我想用 c 锁定文件的 64k 128k 知道如何锁定文件的那部分吗 你需要使用锁定文件Ex http msdn microsoft com en us library win
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • Windows Phone HttpClient PostAsync 挂起且无响应

    我在拨打电话时遇到问题HttpClientWP 应用程序的 post 方法 PostAsync总是挂起并且不给出任何响应 当我从 WPF 应用程序中尝试时 相同的代码可以工作 这是我正在做的事情 服务器Web API代码 public cl
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • RabbitMQ + Windows + LDAP 无需发送密码

    我正在尝试在 Windows 7 上使用 RabbitMQ 3 6 2 进行 LDAP 身份验证 授权 我已经在应用程序发送用户名 密码的情况下进行了基本身份验证 但密码位于我需要弄清楚如何进行的代码中避免 有没有人在不提供密码的情况下成功
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • 如何通过Task.ContinueWith创建传递?

    我想在原始任务结束时添加一个任务 但想保留原始结果和类型 附加任务仅用于记录目的 例如写入控制台等 例如 Task Run gt DateTime Now Hour gt 12 Hey throw new Exception Continu
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • pecl 在生产服务器上安装扩展的问题

    所以我在本地安装了pecl oauth模块 一切都运行良好 然后我尝试对生产服务器执行此操作 但遇到了一些问题 如果我说 sudo pecl install oauth 我会收到此错误 No releases available for p
  • 如何关闭 Spring 3 调试日志记录?

    我想关闭 Spring 3 1 的 log4j 日志记录 同时为我自己的代码保留调试状态 我尝试将这一行粘贴到我的 log4j properties 中 log4j category org springframework WARN 要得到
  • SignalR 2.0.0 beta2 IJsonSerializer 扩展性

    我想添加一些自定义序列化逻辑 以便转换后的 json 包含驼峰式大小写属性 出于这个原因 我尝试用我在此链接中找到的一个替换默认的 IJsonSerializer https github com SignalR SignalR issue
  • 获取“django.core.exceptions.ImproperlyConfigured:需要 GEOS,但尚未检测到”。虽然安装了GEOS

    我在跑姜戈 1 8 and Python 3 4 on Ubuntu 14 04 LTS 就在最近 我的 Django 应用程序报告了这一点GEOS不存在 GEOS已安装并且libgeos c so是它应该在的地方 usr lib 我的代码
  • 使用 xstream 自定义 java 集合的序列化

    我有一个需要序列化为 XML 的对象 其中包含以下字段 List
  • 类型初始值设定项(静态构造函数)异常处理

    我正在用 C 编写 WCF 服务 最初 我的实现有一个静态构造函数来执行一些一次性初始化 但正在完成的某些初始化可能 暂时 失败 看来静态构造函数只被调用一次 即使第一次 失败 尝试抛出异常 任何后续实例化我的类的尝试都将立即失败 并显示T
  • 如何在div内使用带有文本的剪辑路径?

    我尝试了以下方法 http codepen io anon pen YXePBY div lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit
  • JavaScript 判断对象是否为数组的方法[重复]

    这个问题在这里已经有答案了 判断一个对象是否是数组的 正确 方法是什么 函数 isArray o 最好的办法 function isArray obj return Object prototype toString call obj ob
  • 有没有一种方法可以在不按回车键的情况下获取用户输入? [复制]

    这个问题在这里已经有答案了 我正在编写一个控制台游戏 吃豆人 我想知道如何在不按回车键的情况下获得用户输入 我在互联网上浏览了一下 发现了一些关于 getch 但它显然不再是最新的 并且没有已知的头文件来声明它 除非有人构建自己的头文件 而
  • 没有元素的索引数组

    我有一个向量 a Vector 1 4 1 2 3 4 我想将它索引到所有元素but第三个得到 1 2 4 in R你可以做a 3 你在做什么Julia 最终我想循环遍历所有元素并将它们与其余元素进行比较 也许这是相关的 该用例是常见的用例
  • 使 Python 单元测试显示 AssertionError 但不显示 Traceback

    我在这里查看了其他相关问题 但没有找到我的答案 我想简化 Python 2 7 单元测试的输出 试sys tracebacklimit 0不工作 这是我的代码片段 真实的代码会生成很多类似的测试 usr bin python E impor
  • 切换画布上下文

    假设我有一个 WebGL 画布 通过调用getContext experimental webgl 有没有办法稍后切换上下文以使用 2d one 这样做的目的是在渲染过程中发生错误时显示类似调试 BSOD 的信息 如果不可能 那么 我可以在
  • BSP 地下城生成的简单示例

    我最初是想追随这个算法用 C 创建一个简单的 Roguelike 地下城 但我想我太愚蠢了 因为我的结果总是一团糟 然后 我切换到我自己的算法 该算法产生的结果不是很好 但半可识别为地下城 有没有人有任何以 BSP 方式执行此操作的示例 如
  • 如何从 Java 6 中的字节数组中获取 MIME 类型?

    我一直在试图弄清楚如何获取MIME类型来自 Java 6 中的字节数组 但不幸的是还无法获取 MIME 类型 有人可以帮我摆脱这个困境吗 您可以使用MimetypesFileTypeMapJava 6 提供的类 该类专门用于获取MIME类型
  • 在 Pandas 中重新采样,同时保持价值关联

    从这样的事情开始 from pandas import DataFrame time np array 2015 08 01T00 00 00 2015 08 01T12 00 00 dtype datetime64 ns heat ind
  • 如何使用 json4s 将对象序列化为 AST?

    我正在编写一个客户序列化程序 在那个序列化器中 我想以某种方式说 这件事你已经知道如何序列化 我目前的方法如下 import org json4s native Serialization import org json4s JsonDSL
  • 如何为单个存储库禁用 git 的凭据助手?

    如果我在我的帐户中设置了凭证助手 gitconfig 如何在特定的存储库中禁用 绕过它并使用no凭证助手 我尝试过编辑存储库 git config文件以清空credential helper像这样的属性 credential helper
  • std::move 的逆函数是否存在? [复制]

    这个问题在这里已经有答案了 std move当移动尚未被隐式允许时 例如often当从函数返回本地对象时 现在 我想知道 尤其是在本地返回和隐式移动的背景下 如果存在这样的逆元std move那将prevent移动对象 但仍然允许复制 这还
  • Python:模块列表(>>> help('modules') 不起作用)

    我想要我的模块列表 并被告知 gt gt gt help modules 会成功的 但我只是得到 请稍等一下 我正在收集 所有可用模块的列表 等了10多分钟才把它杀掉 有谁知道这可能是什么原因造成的 或者我怎样才能看到我的模块 系统Ubun
  • 可变参数嵌套循环

    我正在研究 N 维网格 我想根据任何维度 2D 3D 4D 等 生成嵌套循环 我怎样才能以优雅而快速的方式做到这一点 下面是我的问题的简单说明 我正在用 C 编写 但我认为此类问题对于其他语言也很有用 我需要知道我的 do stuff 部分