向量储备 C++

2023-11-26

我有一个非常大的多维向量,其大小一直在变化。 当我只知道大小的近似值时,使用 vector.reserve() 函数有什么意义吗?

所以基本上我有一个向量

A[256*256][x][y]

其中,程序中的每次迭代 x 都会从 0 变化到 50,然后再次变回 0。 y 值每次都可能不同,这意味着对于每个[256*256][y]向量 y 的元素可以具有不同的大小,但仍小于 256;

所以为了澄清我的问题,这就是我所拥有的:

vector<vector<vector<int>>> A;
for(int i =0;i<256*256;i++){
  A.push_back(vector<vector<int>>());
  A[i].push_back(vector<int>());
  A[i][0].push_back(SOME_VALUE);
}

将元素添加到向量中...

A.clear();

在此之后,我再次从顶部做同样的事情。

我应该何时以及如何为向量保留空间。 如果我理解正确的话,如果我使用保留,因为我一直在改变尺寸,我会节省很多时间?

保留向量可以拥有的最大大小的负面/正面是什么[256*256][50][256]在某些情况下。

顺便提一句。我知道不同的矩阵模板和Boost,但决定在这个上使用向量......

EDIT:我还想知道如何在多维数组中使用保留函数。 如果我只保留二维向量,如果我超出了其在第三维的容量,它会复制整个向量吗?


为了帮助讨论,您可以考虑以下 typedef:

typedef std::vector<int> int_t;   // internal vector
typedef std::vector<int_t> mid_t; // intermediate
typedef std::vector<mid_t> ext_t; // external

增长成本(载体容量增加)int_t只会影响该特定向量的内容,不会影响任何其他元素。成长的成本mid_t需要复制该向量中的所有存储元素,也就是说,它将需要所有int_t矢量,成本相当高。成长的成本ext_t很大:需要复制all已经存储在容器中的元素。

现在,为了提高性能,获得正确的结果更为重要ext_t大小(在你的问题中似乎固定为 256*256)。然后得到中间mid_t大小正确,因此很少发生昂贵的重新分配。

您所讨论的内存量很大,因此您可能需要考虑不太标准的方法来解决您的问题。首先想到的是添加额外的间接级别。如果不是保存实际的向量,而是将智能指针保存到向量中,则可以减少增长向量的成本mid_t and ext_t向量(如果ext_t大小是固定的,只需使用向量mid_t)。现在,这意味着使用您的数据结构的代码将更加复杂(或者最好添加一个处理间接的包装器)。每个int_t向量将在内存中分配一次,并且永远不会在内存中移动mid_t or ext_t重新分配。重新分配的成本mid_t与分配的数量成正比int_t向量,而不是插入的整数的实际数量。

using std::tr1::shared_ptr; // or boost::shared_ptr
typedef std::vector<int> int_t;
typedef std::vector< shared_ptr<int_t> > mid_t;
typedef std::vector< shared_ptr<mid_t> > ext_t;

您应该考虑的另一件事是std::vector::clear()不会释放向量中分配的内部空间,仅销毁包含的对象并将大小设置为 0。即调用clear()永远不会释放内存。实际释放向量中分配的内存的模式是:

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

向量储备 C++ 的相关文章

  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp

随机推荐

  • SQL Server 2012 中的行级安全性

    SQL Server 2012 中的行级安全性有什么新变化吗 在 2008 年及以下 唯一的方法是使用 Views 2012 年他们宣布某物 like Row Level Security in Tabular Models 这与表上的 R
  • NSCollectionViewItem 从不实例化

    我在这里有点迷失 我创建了一个像 colorPicker 一样的按钮 单击它会在弹出窗口中显示一个 collectionView 我首先使用包含视图 collectionView 嵌入为scrollView clipView 的nib fi
  • 如何在 Nvidia Shield 上正确计时 Android RenderScript 代码

    我在 RenderScript 中实现了一个小型 CNN 想要分析不同硬件上的性能 在我的 Nexus 7 上 时间有意义 但在 NVIDIA Shield 上则不然 CNN LeNet 采用队列中的 9 层实现 计算按顺序执行 每一层都是
  • python将数字添加到字符串[重复]

    这个问题在这里已经有答案了 尝试将 count int 添加到字符串末尾 网址 Code count 0 while count lt 20 Url http www ihiphopmusic com music page Url Url
  • 如何使用 bluebird 来 promisify MySql 函数?

    前段时间我决定从 PHP 切换到 Node 在我的第一个项目中 我不想使用任何 ORM 因为我认为我不需要让我的生活变得如此复杂 学习另一件事 目前我正在学习 Node 和 Angular 因此我决定使用 mysql 包 而不需要使用 my
  • ng-focus 和 ng-blur 事件在 Angularjs 中未触发

  • Android“repo”文档可用吗?

    关于用于 Android 存储库管理的谷歌 repo 工具的唯一文档是 https sites google com a android com opensource download using repo 这比什么都没有 可用的帮助与键入
  • SwingWorker 的原理是什么?

    据我所知 它用于在 swing 应用程序中调度一个新线程来执行一些 后台 工作 但是使用它而不是 普通 线程有什么好处 使用新线程并在完成时使用 SwingUtilities invokeLater 调用某些 GUI 方法是不一样的 我在这
  • 如何在 SQL Server 中创建外键?

    我从来没有为 SQL Server 手工编码 过对象创建代码 并且外键声明在 SQL Server 和 Postgres 之间似乎是有区别的 到目前为止 这是我的 sql drop table exams drop table questi
  • 为什么我的 Python App Engine 应用程序使用 Translate API 时出现 ImportError 错误:没有名为 apiclient.discovery 的模块?

    我收到这个错误谷歌应用程序引擎Python使用过谷歌翻译API 但不知道怎么解决
  • 我可以将 PHPUnit 打包为 phar 吗?

    我想将 PHPUnit 和各种其他测试依赖项打包到 phar 中并将其放入 svn 中 这样我就可以在任何客户端机器上运行 phpunit 而不需要 pear 这可以做到吗 当前状态 phpunit phar 的工作已开始于phpunit
  • 使用类中的静态函数而不命名类

    如何访问类中的函数而不必每次都命名该类 我知道如何使用 using 这样我就不必命名命名空间 但我希望有一种方法可以处理这个静态函数 这样我就可以像调用同一个类中的函数一样调用它们 使用静态yournamespace yourclassna
  • Date.getTime() 与 Date.getTime() 对比日期.now()

    我注意到 now 只能由 Date 对象调用 getTime 只能由日期实例调用 var dd1 new Date console log dd1 now Throws error gt TypeError Object Mon Aug 1
  • 如何在 TypeScript 文件中调用 NodeJS?

    如何加载常规 NodeJS 模块 来自node modules 从一个TypeScript class 当我尝试编译时 ts文件包含 var sampleModule require modulename 编译器提示我不能在此范围内使用 r
  • 核心数据加密

    我有关于核心数据加密的问题 我将一些敏感的用户数据存储在 Core Data SQLite 数据库中 关键值都是可转换的 我使用 AES256 来 即时 加密和解密它们 包括每个值的单独 IV 加密密钥是用户选择的密码的 SHA512 哈希
  • 获取流中符合条件的第一个元素

    如何获取流中与条件匹配的第一个元素 我已经尝试过这个但不起作用 this stops stream filter Stop s gt s getStation getName equals name 该标准不起作用 过滤器方法是在 Stop
  • 使用 Powershell 将 XML 转换为哈希表

    我想转换 XML
  • 扩展打字稿接口

    在 TypeScript 中扩展 Express Request 接口时 我遇到了这个问题 我想使用外部库定义 但无法导入外部库 因为它会导致错误 gt 错误 4 28 TS1147 内部模块中的导入声明无法引用外部模块 编辑 这是一个 d
  • ReferenceError:未定义要求

    我目前正在开发 Mozilla Firefox 插件 我已经设置了一个面板并附加了一个内容脚本 我需要在内容脚本和 main js 之间进行通信 我为此使用 addon sdk 的端口 api 然而由于某种原因 我什至无法在两者之间传递简单
  • 向量储备 C++

    我有一个非常大的多维向量 其大小一直在变化 当我只知道大小的近似值时 使用 vector reserve 函数有什么意义吗 所以基本上我有一个向量 A 256 256 x y 其中 程序中的每次迭代 x 都会从 0 变化到 50 然后再次变