当前位置: 首页 > news >正文

志迅东莞网站建设钻井网站建设

志迅东莞网站建设,钻井网站建设,长沙找人做企业网站文案,苏州做网站设计【c随笔16】reserve之后#xff0c;使用std::copy会崩溃? 一、reserve之后#xff0c;使用std::copy会崩溃?二、函数std::reserve、std::resize、std::copy1、std::resize#xff1a;2、std::reserve#xff1a;3、std::copy#xff1a; 三、崩溃原因分析方案1、你可以使… 【c随笔16】reserve之后使用std::copy会崩溃? 一、reserve之后使用std::copy会崩溃?二、函数std::reserve、std::resize、std::copy1、std::resize2、std::reserve3、std::copy 三、崩溃原因分析方案1、你可以使用 std::back_inserter 插入迭代器来向 destination 中插入元素代码如下方案2、resize将容器大小调整同时新增的元素将会被默认初始化为0这样std::copy中的destination.begin()就可用访问到元素了 原创作者郑同学的笔记 原创地址https://zhengjunxue.blog.csdn.net/article/details/134272501 一、reserve之后使用std::copy会崩溃? 先看代码 #include iostream #include vector #include algorithmint main() {std::vectorint source { 1, 2, 3, 4, 5 };std::vectorint destination;// 在目标vector中预留足够的空间避免不必要的重新分配destination.reserve(source.size());// 使用std::copy将source中的元素复制到destination中std::copy(source.begin(), source.end(), destination.begin());// 打印复制后的destination内容for (int num : destination) {std::cout num ;}std::cout std::endl;return 0; }运行崩溃截图如下 我们先简单说下std::reserve、std::resize、std::copy三个函数的用法然后再说崩溃的原因。 二、函数std::reserve、std::resize、std::copy 1、std::resize std::resize 用于改变容器的大小并可以指定新元素的初值。如果新的大小大于当前大小则在末尾添加新元素如果新的大小小于当前大小则删除多余的元素。使用 resize 会改变容器内的元素个数并可能导致元素值的改变。 示例代码如下 std::vectorint vec {1, 2, 3}; vec.resize(5); // 将容器大小调整为 5新增的元素将会被默认初始化为0 vec.resize(3); // 将容器大小调整为 3多余的元素将会被删除2、std::reserve std::reserve 用于预留容器的空间但不会改变容器的大小。当你知道容器将要存储大量元素时可以使用 reserve 来提前分配足够的内存避免容器多次扩张操作。使用 reserve 不会改变容器中的元素个数只是预分配了足够的空间。 示例代码如下 std::vectorint vec; vec.reserve(100); // 预留至少能容纳100个元素的空间3、std::copy template class InputIterator, class OutputIterator OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);std::copy 用于将一个范围内的元素复制到另一个范围它可以用于将一个容器中的元素复制到另一个容器中 注意事项 确保输出范围有足够的空间来容纳被复制的元素否则可能会导致未定义的行为。当处理容器时确保输出容器有足够的容量或者使用插入迭代器如 std::back_inserter来确保动态分配足够的空间。 int source[] {1, 2, 3, 4, 5}; int destination[5];// 使用 std::copy 将 source 数组的内容复制到 destination 数组 std::copy(std::begin(source), std::end(source), std::begin(destination));三、崩溃原因分析 在这个代码中当你使用 std::copy 将 source 中的元素复制到 destination 中时会导致程序崩溃的原因是因为 destination 容器的空间虽然预留了但是其中并没有实际的元素所以无法直接通过 destination.begin() 来访问 destination 的首个元素。 在使用 std::copy 进行复制时目标容器必须有足够的空间来容纳被复制的元素并且使用 std::back_inserter 或者确保目标容器大小与源容器相同的方式来进行插入操作。如果目标容器没有足够的空间或者没有正确的插入迭代器就会导致未定义的行为可能导致程序崩溃。 要修复这个问题有两个方法你可以使用 方案1、你可以使用 std::back_inserter 插入迭代器来向 destination 中插入元素代码如下 #include iostream #include vector #include algorithmint main() {std::vectorint source { 1, 2, 3, 4, 5 };std::vectorint destination;// 在目标vector中预留足够的空间避免不必要的重新分配destination.reserve(source.size());// 使用std::copy将source中的元素复制到destination中std::copy(source.begin(), source.end(), std::back_inserter(destination));// 打印复制后的destination内容for (int num : destination) {std::cout num ;}std::cout std::endl;return 0; }方案2、resize将容器大小调整同时新增的元素将会被默认初始化为0这样std::copy中的destination.begin()就可用访问到元素了 #include iostream #include vector #include algorithmint main() {std::vectorint source { 1, 2, 3, 4, 5 };std::vectorint destination;// 在目标vector中预留足够的空间避免不必要的重新分配destination.resize(source.size());// 使用std::copy将source中的元素复制到destination中std::copy(source.begin(), source.end(), destination.begin());// 打印复制后的destination内容for (int num : destination) {std::cout num ;}std::cout std::endl;return 0; }
http://www.pierceye.com/news/328910/

相关文章:

  • 好的学习网站打广告免费浏览器网站
  • 美团先做网站还是app学生网站建设的总结与评价
  • 网站建设代理网站wordpress微博
  • dw建设网站视频宁波seo优化项目
  • 网站里添加百度地图浙江网站建设公司
  • php网站开发最新需求排名优化百度
  • 网站制作的电话智慧校园信息门户网站建设
  • 网站备案申请福田企业网站优化方案
  • 企业网站seo怎么做有空间站的国家
  • Linux网站建设总结网站建设目的确定
  • 怎么做网站的内部链接wordpress 写php页面跳转
  • 推广自己的网站网页设计代码html文件怎么查
  • 网站在线制作软件邯郸公众号小程序制作
  • 网站后台生成静态页面天津百度推广电话号码
  • 网站单个页面301跳转湖南省建设局网站
  • 潮州网站建设十堰seo招聘
  • 企业网站建设公司公司系统优化的方法
  • 网站开发与sparkwordpress default
  • 品牌网站建设帮你大蝌蚪北京做网站建设的公司排名
  • 中国建设第一平台网站网络网站建设10大指标
  • 书画院网站源码网站主题模板下载不了
  • 邢台制作网站网上申报流程
  • 做网站的困难做的网站有营销效果吗
  • 高端集团网站建设公司做网站开发的有外快嘛
  • 网站服务器防火墙设置惠州网络推广公司哪家好
  • 做网站根据内容生成pdfwordpress自媒体二号
  • 临沂网站开发不会写代码怎么做网站
  • 怎么做加密货币网站wordpress 多域名登陆
  • 做网站的过程做网站公司广州
  • 女人动漫做受网站wordpress如何作页面