在 C++ 中什么时候使用向量,什么时候使用数组?

2024-04-13

我通常不确定什么时候使用其中一种更好。一般来说,它们似乎都做同样的事情,但就其功能而言,向量是否更灵活?什么时候数组比较合适?


通常总是更喜欢使用std::vector<T>因为一旦向量超出范围,销毁就会自动进行,分配的内存将整齐地放置在堆上,并且所有内存都将为您处理。std::vector<T>为您提供数组中获得的所有内容,甚至保证元素将连续存储在内存中(除了std::vector<bool>).

如果是std::vector<bool>你必须小心,因为这样的代码会崩溃:

 std::vector<bool> vb;
 vb.push_back(true);
 vb.push_back(false);
 vb.push_back(true);
 bool *pB = &vb[0];
 if( *(pB+1) )
 {
     // do something
 }

事实是,std::vector<bool>不存储连续的bools。这是标准中的一个例外,已在 C++11 中修复。

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

在 C++ 中什么时候使用向量,什么时候使用数组? 的相关文章

随机推荐

  • Active Directory 是否支持事务?

    简单的问题 但我在任何地方都找不到答案 Active Directory 是否支持事务 换句话说 以下更改是否会回滚 因为我没有调用scope Complete using var scope new TransactionScope Di
  • 是否可以定义一个符合协议的Class类型的属性?

    例如 我有MyFancyData协议 如何指定 MyFancyDataClass 属性仅接受符合此协议的类 interface MyObject NSObject property Class MyFancyDataClass proper
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 使用 caseInSensitive 在 Firebase 中保存和/或查询用户显示名称?

    我正在将我的项目从 Swift 转移到 Firebase Firebase 用户没有用户名 但我允许他们保存显示名称 该名称更像是属性而不是实际对象 如何让用户在敏感文本中使用大小写来查询其他用户 朋友 您可以轻松完成此任务 我们不知道您当
  • 如何缓存 sbt TaskKey 的结果?

    我有一项昂贵的任务需要在测试中参考 lazy val exampleSources TaskKey Seq File exampleSources for use in tests exampleSources updateClassifi
  • 空指针与悬挂指针

    空指针和悬空指针之间有有意义的区别吗 看起来这两个术语都用于表示不指向任何内容的指针 是一个悬空指针的想法used引用某些东西 但现在没有 其中空指针只是一个不引用任何东西的指针 无论它过去指向什么 指针术语 悬空 或野 指针 指向某处的指
  • 如何发光最小。最大和关闭按钮?

    我按照以下指南使用 DWM API 创建自定义 Aero 框架 My work void CMainFrame OnActivate UINT nState CWnd pWndOther BOOL bMinimized CFrameWnd
  • 将数据库与 Elastic beanstalk 一起使用

    我一直在尝试在 AWS 上部署基于 Django 的问卷应用程序 就此而言 我对 AWS 和 Web 应用程序完全陌生 当我构建我的应用程序时 它在本地服务器上运行良好 我在 settings py 中使用了它 DATABASES defa
  • 在后台执行 Laravel/Symfony/Artisan 命令

    我需要在后台执行 Laravel 长时间运行的进程来使用 Twitter Streaming API 实际上 我需要运行的 php artisan CLI 命令是 nohup php artisan startStreaming gt de
  • 如何从 Django/postgreSQL 数据库中获取一个随机项目?

    所以我得到了database objects all 和database objects get name 但是我如何从数据库中获取一个随机项目 我无法弄清楚如何获得它并选择一个随机项目 从所有数据库对象的列表中选择随机元素并不是一个好的解
  • Sass 是连接而不是添加? [复制]

    这个问题在这里已经有答案了 我需要在 SCSS 代码中定义宽度 如下所示 example width currentWidth 349 important Where currentWidth由循环定义 然而 Sass 最终总是连接两个数字
  • Mac OSX:使用 dtruss?

    我正在尝试在 Mac OSX Catalina 中 dtruss 进程 但是 dtrace 报告错误 sudo dtruss whoami dtrace system integrity protection is on some feat
  • 如何调试 lxml.etree.XSLTParseError:无效的表达式错误

    我试图找出为什么 lxml 无法解析由带有各种内容的 根 文档组成的 XSL 文档xml includes 我收到错误 Traceback most recent call last File s py line 10 in
  • 使用 skimage 从多边形中提取图像片段

    我想获得通过剪切图像内的多边形而产生的子图像 我在 skimage 中有一个图像 在 matplotlib patches 中有一个多边形 怎么做 以下是我尝试过的 我不一定在寻找类似于下面的方法 我正在寻找最干净 最有效的实现 使用此代码
  • 如何卸载所有 Bower 软件包?

    有时 重建整个站点并强制 Bower 重新安装 Bower json 中所有软件包的新版本很有用 但是 似乎没有任何方法可以做到这一点 尝试 1 bower uninstall bower not installed 0 不 这只能在逐个包
  • gson:将 null 视为空字符串

    I use 谷歌 gson http code google com p google gson 将 Java 映射序列化为 JSON 字符串 它提供构建器处理空值 https sites google com site gson gson
  • 是否可以将 cacerts 的所有内容导入到 jssecacerts 文件中?

    使用 keytool 或其他方法 是否有一种简单的方法将 cacerts 的所有内容导入 jssecacerts 文件 基本上 我想定义自己的 jssecacerts 但我希望 jssecacerts 也包含 cacerts 文件的所有可信
  • iOS OneDrive (skydrive) 应用程序每次运行时都会显示权限对话框

    我正在开发一个 iOS 应用程序 让用户可以访问他们的 OneDrive SkyDrive 但我遇到了一个非常烦人的问题 用户第一次将应用程序链接到 OneDrive 时 一切都会按预期进行 他们必须输入用户 ID 和密码 然后他们必须同意
  • 如果 g(n) = sqrt(n)^sqrt(n),g(n) 的复杂度是否 = O(2^n)?

    If g n sqrt n sqrt n does the complexity of g n O 2n 任何帮助表示赞赏 比较两个指数函数时的一个有用技巧是让它们具有相同的底数 n n 2lg n n 2 n lg n Now you r
  • 在 C++ 中什么时候使用向量,什么时候使用数组?

    我通常不确定什么时候使用其中一种更好 一般来说 它们似乎都做同样的事情 但就其功能而言 向量是否更灵活 什么时候数组比较合适 通常总是更喜欢使用std vector