在 C++ 中创建矩阵的正确方法

2023-11-22

我想为图创建一个邻接矩阵。因为我读过,使用以下形式的数组是不安全的matrix[x][y]因为它们不检查范围,所以我决定使用 stl 的向量模板类。我需要在矩阵中存储的只是布尔值。所以我的问题是,如果使用std::vector<std::vector<bool>* >*产生太多的开销,或者是否有一种更简单的矩阵方法以及如何正确初始化它。

编辑:非常感谢您的快速回答。我刚刚意识到,我当然不需要任何指示。矩阵的大小将在开始时初始化,直到程序结束才会改变。这是一个学校项目,所以如果我编写“好的”代码就好了,尽管技术上的性能并不是太重要。使用STL就可以了。使用像 boost 这样的东西可能不会被赞赏。


请注意,您也可以使用增强ublas用于矩阵创建和操作以及升压图以多种方式表示和操作图形,以及对它们使用算法等。

Edit:无论如何,为您的目的做一个向量的范围检查版本并不是一件难事:

template <typename T>
class BoundsMatrix
{
        std::vector<T> inner_;
        unsigned int dimx_, dimy_;

public:
        BoundsMatrix (unsigned int dimx, unsigned int dimy)
                : dimx_ (dimx), dimy_ (dimy)
        {
                inner_.resize (dimx_*dimy_);
        }

        T& operator()(unsigned int x, unsigned int y)
        {
                if (x >= dimx_ || y>= dimy_)
                        throw std::out_of_range("matrix indices out of range"); // ouch
                return inner_[dimx_*y + x];
        }
};

请注意,您还需要添加 const 版本的运算符和/或迭代器,以及异常的奇怪使用,但您明白了。

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

在 C++ 中创建矩阵的正确方法 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • asp.net 文本框文本模式数字,仅允许数字

    我只是想知道 ASP NET 中是否有一种方法只允许文本框中的数字textmode number 当我使用这个时
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 使用相同 HTTPS 客户端证书在并发会话的 IIS 上收到 413 错误

    我有以下问题 我在 IIS 8 上托管一个 WCF 应用程序 它接受only带有客户端证书的 HTTPS 请求 此服务接受大小可能不同 从几个字节到最大 1 GB 的 POST 消息 并且大多数时间都是并行接收的 在以下情况下 客户端会收到
  • 如何在不使用 CLI 的情况下部署 Angular2 项目

    这是我为 Angular 2 中制作的项目制作的文件夹结构 我删除了 Node Module 文件夹和其他文件夹以适应此处 对于样式我只使用了 Bootstrap 我没有使用过 Angular CLI 谁能指导我应该如何部署它 我应该使用
  • 解析存储为字符串的浮点数应该抛出异常

    我有一个存储数字的字符串 现在我想解析该字符串并获取浮点数 import java util import java lang import java io Name of the class has to be Main only if
  • 如何让python3导入Homebrew安装的graph-tool?

    我尝试使用 Homebrew 来安装图形工具 但是python3找不到它 brew tap homebrew science brew install graph tool 据说该包安装在homebrew science graph too
  • 让 SSDT 只生成 SQL 脚本(而不部署数据库)

    最近升级到 SSDT 2012 后 我似乎缺少仅生成 T SQL 脚本而不是将数据库部署到某个服务器的选项 更准确地说 SSDT 的前身曾经将部署操作设置为 生成脚本 但我在新版本中找不到该选项 是否可以 要从 SSDT 中的离线数据项目生
  • jinja2:宏选择宏或动态宏调用

    我有一个正在查看的命名元组列表 每个元组的渲染要求略有不同 因此我想根据属性调用正确的宏 我所拥有的是这样的 macro format item item if item type of a format a item elif item
  • 如何同时使用 splat 和可选散列在 ruby​​ 中定义方法? [复制]

    这个问题在这里已经有答案了 我可以定义这样的方法 def test id ary hash params Do stuff here end 但这使得hash params参数强制 这些也不起作用 def t id ary hash par
  • 如何以完美的精度将字符串转换为浮点数?

    我正在尝试用 D 编程语言编写一个函数来替换对 C 的 strtold 的调用 理由 要使用 D 中的 strtold 您必须将 D 字符串转换为 C 字符串 这是低效的 而且 strtold 无法在编译时执行 我已经提出了一个大部分有效的
  • 当replace=true时如何防止角度指令中的重复属性

    我发现指定的角度指令replace true会将指令用法中的属性复制到模板呈现的输出中 如果模板包含相同的属性 则模板属性值和指令属性值将在最终输出中组合在一起 指令用法
  • 如何抓取数千个 PDF 文件中的表格?

    我有大约 1 500 个 PDF 每个 PDF 仅包含 1 页 并且具有相同的结构 请参阅http files newsnetz ch extern interactive downloads BAG 15m kzh 2012 de pdf
  • 为什么 gitlab-runner 无法克隆我的项目? (主机名错误,连接失败)

    我设置了 Gitlab 服务器并需要使用 gitlab runner exe 运行测试 Windows gitlab runner 的执行器设置为shell the config toml好像 concurrent 1 check inte
  • 如何捕获 JNI/Java 异常?

    我的应用程序中有一个 JNI 层 在某些情况下 Java 会引发异常 如何获取JNI层的Java异常 我的代码如下 if pConnDA gt penv gt ExceptionCheck pConnDA gt penv pConnDA g
  • C++ 任意长度整数

    在C 中 是否可以定义任意长度的整数 所以不必使用uint64 t对于 33 到 64 位之间的任何内容 我可以定义自己的 34 位 36 位等整数 正如您提到的 编译器有自己的类型 long 大多数平台上为 32 位 和 long lon
  • Clr 命名空间映射到默认 xaml 命名空间

    我有点厌倦了必须在每个 xaml 文件中声明 xmlns 以及必须为自定义控件使用前缀 是否可以将 clr 命名空间映射到 http schemas microsoft com winfx 2006 xaml presentation 我在
  • 如何为 Eclipse 和 M2E 的 maven pom.xml 文件中的类路径条目定义访问规则?

    为了避免 jfxrt jar 的非法访问警告 我手动更改了类路径文件以包含访问规则 想要类路径条目
  • 如何用flutter检查输入的电话号码是否有效?

    我正在尝试检查输入的电话号码是否有效 意思是 如果我输入了世界上不存在的错误数字 那么它会向我显示一个内容为 请输入有效数字 的祝酒词 Expanded child TextField keyboardType TextInputType
  • 读取带有分隔符的文件

    如何从文件中读取行并将该行的特定段分配给结构中的信息 如何在空白行处停止 然后再次继续 直到到达文件末尾 背景 我正在构建一个程序 它将获取输入文件 读入信息 并使用双重哈希将该信息放入哈希表的正确索引中 假设我有结构 struct Dat
  • Gradle 为每个资源文件夹构建

    是否可以配置 Gradle 来构建几个 Android apk 文件 其中每个文件仅使用一个资源类型文件夹 I mean 构建 hdpi apk 构建 mdpi apk 构建 xhdpi apk 我知道我可以在构建之前简单地删除某些文件夹
  • GUI 的自动化测试 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 这个问题与单元测试无关 它适用于桌面产品 这是关于 GUI 的测试以及测试是否在正确的时间在正确的文本框中输入了正确的内容 我曾经工作过的一家公司使用过WinRunner 不同的部门 所以
  • 在 C++ 中创建矩阵的正确方法

    我想为图创建一个邻接矩阵 因为我读过 使用以下形式的数组是不安全的matrix x y 因为它们不检查范围 所以我决定使用 stl 的向量模板类 我需要在矩阵中存储的只是布尔值 所以我的问题是 如果使用std vector