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

长治门户网济南seo优化公司助力排名

长治门户网,济南seo优化公司助力排名,做好网站建设工作,网站服务器参数查询标题:[C开发经验总结]何时用push?/何时用emplace? 水墨不写bug 文章目录 一、push与emplace辨析1. push 方法2. emplace 方法3. 注意事项 二、全文总结: 一、push与emplace辨析 1. push 方法 适用场景: 当你已经有一…

标题:[C++开发经验总结]何时用push?/何时用emplace?
@水墨不写bug

在这里插入图片描述


文章目录

  • 一、push与emplace辨析
    • 1. `push` 方法
    • 2. `emplace` 方法
    • 3. 注意事项
  • 二、全文总结:


一、push与emplace辨析

1. push 方法

  • 适用场景
    • 当你已经有一个对象实例,并且你想把它添加到容器中时使用。
  • 语法
    • push_back:用于在容器末尾添加元素。
    • push_front:用于在容器开头添加元素(适用于std::dequestd::list)。
  • 示例
      string data = "data";vec.push_back(data);      // 保留原对象,拷贝到容器vec.push_back(std::move(data)); // 转移资源到容器
    

2. emplace 方法

  • 适用场景
    • 当你想在容器中直接构造对象时使用,避免了不必要的临时对象创建和拷贝。
  • 语法
    • emplace_back:在容器末尾直接构造对象。
    • emplace_front:在容器开头直接构造对象(适用于std::dequestd::list)。
  • 示例
      std::map<int, std::string> myMap;myMap.emplace(4, "fast");    // 直接在 map 中构造 pairstd::vector<std::string> vec;vec.emplace_back("direct");  // 直接构造,无临时对象
    

3. 注意事项

  • emplace 直接在容器中构造对象,通常比 push 更高效,因为它避免了临时对象的创建和拷贝。
  • 在使用 push 时,容器需要调用拷贝构造函数或移动构造函数来添加元素。
  • 需要注意,如果强制对还有用的变量move,那么move后的变量会处于一种有效但未指定状态,不可依赖其内容

但是并不是所有的变量move之后都不可使用其内容,考虑如下的实例:

void MoveBuiltinTypes()
{cout<<"----------------"<<endl;std::vector<int> vec;int a = 10;vec.push_back(std::move(a)); // 使用push_back将已有对象a添加到容器中cout<<"a:"<<a<<endl;
}
void MoveCustomTypes()
{cout<<"----------------"<<endl;std::vector<std::string> vec;std::string s = "hello";vec.push_back(s);        // 拷贝构造:复制 s 到容器中vec.push_back(std::move(s)); // 移动构造:转移 s 的资源到容器中cout<<"s:"<<s<<endl;cout<<"s.size():"<<s.size()<<endl;
}
int main()
{MoveBuiltinTypes();MoveCustomTypes();return 0;
}

运行结果:
在这里插入图片描述string类型的变量s在move之后,内容被清空,size被置为0;内置类型int a变量在move之后,值没有发生变化。这样是为了尽可能提高效率,string调用移动构造,把s内容交换到vec内部;而a变量不占用堆区资源,不改变a的值反而提高了效率。
于是可以推断string的移动构造类似于:

string(string&& other) noexcept {data = other.data;    // 转移指针size = other.size;capacity = other.capacity;other.data = nullptr; // 原对象指针置空other.size = 0;other.capacity = 0;
}

二、全文总结:

(考虑占有资源的自定义类型)

push:对象已经存在,用push。传参时候,传值调用拷贝构造,可能引发拷贝或移动开销;传引用则需要考虑是直接传引用还是传const引用。
emplace:直接在容器内部构造对象,避免临时对象开销,性能更优。

优先使用 emplace:
当元素未构造且可直接通过参数构造时,优先使用 emplace 以提升性能。

    myMap.emplace(42, "answer");  // 优于 myMap.insert({42, "answer"});

使用 push 的场景:

  • 需要保留原对象(拷贝语义)。
  • 需要显式移动资源(移动语义)。
  • 兼容旧代码或特定接口要求。


转载请注明出处


/***                                                                          *          .,:,,,                                        .::,,,::.          *        .::::,,;;,                                  .,;;:,,....:i:         *        :i,.::::,;i:.      ....,,:::::::::,....   .;i:,.  ......;i.        *        :;..:::;::::i;,,:::;:,,,,,,,,,,..,.,,:::iri:. .,:irsr:,.;i.        *        ;;..,::::;;;;ri,,,.                    ..,,:;s1s1ssrr;,.;r,        *        :;. ,::;ii;:,     . ...................     .;iirri;;;,,;i,        *        ,i. .;ri:.   ... ............................  .,,:;:,,,;i:        *        :s,.;r:... ....................................... .::;::s;        *        ,1r::. .............,,,.,,:,,........................,;iir;        *        ,s;...........     ..::.,;:,,.          ...............,;1s        *       :i,..,.              .,:,,::,.          .......... .......;1,       *      ir,....:rrssr;:,       ,,.,::.     .r5S9989398G95hr;. ....,.:s,      *     ;r,..,s9855513XHAG3i   .,,,,,,,.  ,S931,.,,.;s;s&BHHA8s.,..,..:r:     *    :r;..rGGh,  :SAG;;G@BS:.,,,,,,,,,.r83:      hHH1sXMBHHHM3..,,,,.ir.    *   ,si,.1GS,   sBMAAX&MBMB5,,,,,,:,,.:&8       3@HXHBMBHBBH#X,.,,,,,,rr    *   ;1:,,SH:   .A@&&B#&8H#BS,,,,,,,,,.,5XS,     3@MHABM&59M#As..,,,,:,is,   *  .rr,,,;9&1   hBHHBB&8AMGr,,,,,,,,,,,:h&&9s;   r9&BMHBHMB9:  . .,,,,;ri.  *  :1:....:5&XSi;r8BMBHHA9r:,......,,,,:ii19GG88899XHHH&GSr.      ...,:rs.  *  ;s.     .:sS8G8GG889hi.        ....,,:;:,.:irssrriii:,.        ...,,i1,  *  ;1,         ..,....,,isssi;,        .,,.                      ....,.i1,  *  ;h:               i9HHBMBBHAX9:         .                     ...,,,rs,  *  ,1i..            :A#MBBBBMHB##s                             ....,,,;si.  *  .r1,..        ,..;3BMBBBHBB#Bh.     ..                    ....,,,,,i1;   *   :h;..       .,..;,1XBMMMMBXs,.,, .. :: ,.               ....,,,,,,ss.   *    ih: ..    .;;;, ;;:s58A3i,..    ,. ,.:,,.             ...,,,,,:,s1,    *    .s1,....   .,;sh,  ,iSAXs;.    ,.  ,,.i85            ...,,,,,,:i1;     *     .rh: ...     rXG9XBBM#M#MHAX3hss13&&HHXr         .....,,,,,,,ih;      *      .s5: .....    i598X&&A&AAAAAA&XG851r:       ........,,,,:,,sh;       *      . ihr, ...  .         ..                    ........,,,,,;11:.       *         ,s1i. ...  ..,,,..,,,.,,.,,.,..       ........,,.,,.;s5i.         *          .:s1r,......................       ..............;shs,           *          . .:shr:.  ....                 ..............,ishs.             *              .,issr;,... ...........................,is1s;.               *                 .,is1si;:,....................,:;ir1sr;,                  *                    ..:isssssrrii;::::::;;iirsssssr;:..                    *                         .,::iiirsssssssssrri;;:.                      */						 
http://www.dtcms.com/wzjs/191115.html

相关文章:

  • 下单的网站建设教程软文推广案例
  • jsp网站开发遇到问题长沙seo优化推荐
  • 17Z一起做网站广州站免费网站入口在哪
  • web开发包括哪些网站推广优化的原因
  • 幼儿园资质做网站需要什么资质聊城seo整站优化报价
  • 枣庄住房和城乡建设厅网站手机百度seo快速排名
  • 关于幼儿建设网站pptseo 优化 服务
  • 网站怎么查是哪家网络公司做的广东清远今天疫情实时动态防控
  • 简单分析网站的外链 以及优化的策略.真正永久免费网站建设
  • 动态网站建设 毕业答辩小红书网络营销策划方案
  • 永定路网站建设百度品牌广告多少钱一个月
  • 佛山做外贸网站特色百度关键词搜索热度
  • 怎么建设公益网站长春百度网站快速排名
  • 云南省网站备案要求网络优化seo是什么工作
  • 旅游网站开发的结论优化精灵
  • 陕西有没有做网站普查公司上海企业网站推广
  • 万网租空间 网站手机百度网页版 入口
  • 做企业网站流程上海排名优化seobwyseo
  • 镇江网站建设流程seo排名哪家正规
  • 智慧旅游网站建设中国seo关键词优化工具
  • 穹拓网站建设怎么做一个网页
  • 怎么做网站web知乎推广
  • 如何查看一个网站是用什么程序做的免费自助建站哪个最好
  • 网站建设流程步骤怎么样太原最新情况
  • wordpress 作者名称济南seo怎么优化
  • 网站公网安备链接怎么做东莞整站优化排名
  • 做网站的第一步可以看国外网站的浏览app
  • 来宾北京网站建设企业网站的作用和意义
  • seo点石论坛seo优化是怎么回事呢
  • 自己网站建设多少钱百度搜索风云榜排名