std::vector 中的数据存储是连续的吗? [复制]

2023-12-09

我有一个字符向量,我想将其内容作为 char* 传递给另一个函数:

void foo(boost::shared_ptr<std::vector<boost::uint8_t> > data)
{
    bar(data->size()?reinterpret_cast<char*>(&(data.get()->front())):NULL);
}

我可以假设数据总是以连续的方式存储吗? 谢谢。


来自 n2798(C++0x 草案)::

23.2.6 类模板向量[向量]

1 向量是支持随机访问的序列容器 迭代器。此外,它还支持(摊销)恒定时间插入 并在最后进行擦除操作;在中间插入和删除 线性时间。存储管理是自动处理的,但有提示 可以给予提高效率。向量的元素是 连续存储,这意味着如果 v 是一个向量,其中 T 是某个向量 输入除 bool 之外的类型,则它遵循恒等式 &v[n] == &v[0] + n 对于所有 0

在向数组添加元素后,还要检查正在重新分配的数组(使任何指针和迭代器无效)。

另请查看这篇文章:-不要畏缩:向量保证是连续的

连续性实际上是矢量抽象的一部分。原来如此 事实上,重要的是,当人们发现 C++98 标准并没有完全保证连续性,C++03标准 进行了修改,明确增加了担保。

也来自C++ FAQ

#include <vector>
#include "Foo.h"  /* get class Foo */

// old-style code that wants an array
void f(Foo* array, unsigned numFoos);

void g()
{
  std::vector<Foo> v;
  ...
  f(v.empty() ? NULL : &v[0], v.size());  ← safe
}

有趣的表情v.empty() ? NULL : &v[0]如果 v 为空,则简单地传递 NULL 指针,否则传递指向 v 的第一个(第零个)元素的指针。如果您先验知道 v 不为空,则可以将其更改为简单的 &v[0]。 一般来说,这意味着您可以保证&v[0] + n == &v[n],其中 v 是std::vector<T>n 是范围内的整数0 .. v.size()-1.

然而 v.begin() 不保证是 T*,这意味着 v.begin() 不保证与 &v[0] 相同:

void g()
{
  std::vector<Foo> v;
  ...
  f(v.begin(), v.size());  ← Error!! Not Guaranteed!!
    ^^^^^^^^^-- cough, choke, gag; not guaranteed to be the same as &v[0]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::vector 中的数据存储是连续的吗? [复制] 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 在r中使用read_csv导入多个csv文件

    我有一个包含多个 csv 文件名称的向量 library readr data lt c categories csv customers csv employees csv employee territories csv order d
  • InternalsVisibleTo 属性不起作用

    我正在尝试使用InternalsVisibleToassembly 属性 使 NET 类库中的内部类对我的单元测试项目可见 由于某种原因 我不断收到一条错误消息 MyClassName 由于其保护级别而无法访问 两个程序集都已签名 并且我在
  • 将表单结果从联系表单 7 导出到 PDF (fPDF)

    我正在尝试将用户在 WordPress 中的联系表单 7 中输入的值通过 fpdf 导出为 PDF 这就是我所设置的 我可以生成 PDF 但没有从表单动态生成的值 函数 php add action wpcf7 before send ma
  • 角度 $setPristine() 不起作用

    我正在尝试使用 Angular 的内置表单函数 特别是setPristine 清除用户提交时的表单 我的控制器可以访问 scope newForm 我的形式 及其所有方法 但正在运行 scope newForm setPristine 没有
  • Stringify C 预处理器

    这是我的第一篇文章 所以如果我太含糊或提供了每个人都会直观地假设的信息 请告诉我 我对写作很陌生C我只是想更好地了解预处理 我正在编写一个简单的程序 可以使用直接从控制台接收参数gcc Wall std c99 DSEED argument
  • 如何在 JFreechart 中获取点的菱形形状

    我需要在 JFreechart 中的时间序列上获得 A 菱形形状 但我无法做到这一点 有人可以指导应该在下面的代码中添加哪些代码来实现钻石形状点以及如何更改线条的颜色吗 该程序使用 rs 和 stmt 以及其他从数据库派生并在其他地方定义的
  • Firebase 实时数据库写入/上传数据是否收费?

    还有一个问题与这个类似here 但答案并不能满足我的问题 我具体询问实时数据库中的写入操作 我知道读取 下载将被计费 但是 那实时定价没有提到 上传 或 写入 它只提到 下载 存储和同时连接 但是上传 又名写入 怎么样 这是否意味着它是免费
  • 创建参考 y 值的垂直堆叠条形图(岩性/地层柱)

    我想制作一个堆积条形图 其中 y axis md litho x axis litho 数据 我已经尝试使用我修改过的代码来实现它另一个问题在堆栈溢出上 path pd ExcelFile F Backup JN Litologi lito
  • 在 Javascript 中覆盖 undefined 和 IIFE

    我一直在阅读 你不懂Js 系列 并发现了这一点 此模式的另一个应用解决了默认值的 次要利基 问题undefined标识符的值可能会被错误地覆盖 从而导致意外结果 通过命名参数undefined 但不为该参数传递任何值 我们可以保证undef
  • 单击“管理解决方案的 nuget 包”Visual Studio 2015 时 Nuget 包管理器崩溃

    因此 当单击 管理解决方案的 nuget 包 按钮时 我的 Visual Studio 崩溃了 如果我选择调试我会收到此消息 PresentationFramework dll 中发生 System Windows Markup XamlP
  • 之间的区别

    当我使用malloc在 C 程序中 我收到警告 warning incompatible implicit declaration of built in function malloc enabled by default 然后我可以包括
  • 用于提取特定 XML 标记值的批处理文件

    我需要一个批处理文件来检索Data仅标记值 不带标记名称 并将其写入 txt 文件 该文件可能具有比列出的更多的 XML 标签 所以输出应该是 资本收益是美国收入差距的关键因素 而胜利者背后的力量是我们经济体系的全部准则 如果您想平衡在美国
  • 使用 EL 和 JSTL 访问枚举值

    我有一个名为 Status 的枚举 定义如下 public enum Status VALID valid OLD old private final String val Status String val this val val pu
  • Spring - 如何对单个资源应用投影?

    我正在尝试对名为的实体类应用投影Institute 我定义了以下投影类 Projection name instituteProjection types Institute class public interface Institute
  • 使用 I-Beacon 的室内导航 - 准确性正在迅速变化

    我正在使用 I Beacon 做一个室内导航应用程序 为此 我使用信标给出的精度 但情况正在迅速改变 由于该值正在变化 因此即使当我处于静态时 必须计算的用户位置的 X 和 Y 坐标也会变化 因此 请帮助我在我不移动时使精度保持不变 提前致
  • 在 Java 中如何在修改对象时迭代该对象? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 高效相当于在迭代集合时进行删除 在java中迭代集合时从集合中删除项目 我正在尝试循环HashMap Map
  • 运行时 GPU 执行还是 CPU 执行?

    我觉得必须有一种方法来编写代码 使其可以在 CPU 或 GPU 中运行 也就是说 我想编写一些具有 例如 CPU FFT 实现的东西 如果没有 GPU 该实现可以执行 但当 GPU 存在时默认为 GPU FFT 我无法提出正确的问题来让互联
  • 我的 JavaScript 代码只打印一行。我需要它打印 10 行,每行 20 个字符。

    这是一个抛硬币随机发生器 我需要打印 10 行 20 列 这就是我被困住的地方 每次我单击按钮时 我的代码似乎都会正确随机化 它显示 20 列 但我似乎无法让它打印第二行 这可能是一些简单的事情 我只是没有抓住 任何事情都会受到赞赏 Jav
  • 确定 viewWillAppear 是来自打开应用程序,还是取消选择模式

    我目前正在初始屏幕上加载应用程序加载数据 在我看来这会发生 我还有一个在此屏幕上弹出的模式 关闭时执行与 viewWillAppear 中加载数据相同的逻辑 如何仅在应用程序打开时加载数据 而不是在模式关闭时加载数据 UIViewContr
  • std::vector 中的数据存储是连续的吗? [复制]

    这个问题在这里已经有答案了 我有一个字符向量 我想将其内容作为 char 传递给另一个函数 void foo boost shared ptr