首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++设计模式 - 迭代器模式

    C++ STL中各个容器都有迭代器的体现,通过迭代器能够顺序的访问该容器各成员。 意义 有利于隐藏聚合类的内部实现,外部通过迭代器来实现对聚合类的顺序访问。 场景 实现聚合类的一种顺序访问。...源码实现 「编程环境」 编译环境: Linux环境 语言: C++语言 编译命令: make 「工程结构」 Iterator/ ├── aggregatebase.h ├── aggregate.h ├...(1); agg->push_back(2); agg->push_back(13); for (it.First(); it.IsEnd(); it.Next())...(1.2); agg->push_back(2); agg->push_back(13); for (it.First(); it.IsEnd(); it.Next())...在C++ STL库中已经提供迭代器的实现。本文的实现主要是了解迭代器的大致原理。 最后 用心感悟,认真记录,写好每一篇文章,分享每一框干货。

    48020

    C++进阶】深入STL之vector:构建高效C++程序的基石

    学习STL中的vector:开启C++容器之旅的前言 在C++的编程世界中,标准模板库(STL)无疑是每位开发者都需要熟练掌握的工具集。...其中,vector作为STL中最常用的动态数组容器之一,以其灵活、高效和易用的特性,成为了众多C++程序员的首选。 vector容器允许我们存储任意数量的同类型元素,并且能够根据需要进行动态扩展。...1.vector类的基本概念 vector是C++标准模板库(STL)中的一个动态数组容器,它提供了对一段连续空间的动态管理功能。...与普通的C++数组相比,vector具有许多优点,如可以动态调整大小、支持随机访问等。...随着对vector的学习和使用,我们逐渐理解到,一个高效的C++程序不仅仅是代码的堆砌,更是对数据结构、算法和STL等标准库深刻理解的体现。

    21310

    C++ 中文周刊 第108期

    C++ 中文周刊 第108期 本周内容不多,但是比较难理解 ---- 资讯 标准委员会动态/ide/编译器信息放在这里 编译器信息最新动态推荐关注hellogcc公众号 上周更新 2023-03-29...member 'a' is ambiguous } async_simple 源码分析(上) async_simple 源码分析(下 介绍协程应用以及如何更好的封装成Lazy类 技术解读:现代化工具链在大规模 C+...catch (...) { promise.unhandled_exception(); } co_await promise.final_suspend(); } push_back...vs emplace_back: When to use what push_back 当你想把已有的临时对象放到你的vector或者想把已有的对象move到你的vector emplace_back...当你想创建临时对象,放到你的vector,没必要创建个临时对象再push_back 开源项目需要人手 asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群384042845和作者对线

    31840

    C++(STL):19---deque之删除和emplace用法

    成员函数 功能 push_back() 在容器现有元素的尾部添加一个元素,和 emplace_back() 不同,该函数添加新元素的过程是,先构造元素,然后再将该元素移动或复制到容器的尾部。...emplace_back() C++ 11 新添加的成员函数,其功能是在容器尾部生成一个元素。和 push_back() 不同,该函数直接在容器头部构造元素,省去了复制或移动元素的过程。...emplace_front() C++ 11 新添加的成员函数,其功能是在容器头部生成一个元素。和 push_front() 不同,该函数直接在容器头部构造元素,省去了复制或移动元素的过程。...emplace() C++ 11 新添加的成员函数,其功能是 insert() 相同,即在指定的位置直接生成一个元素。...在实际应用中,常用 emplace()、emplace_front() 和 emplace_back() 分别代替 insert()、push_front() 和 push_back(),具体原因本节后续会讲

    1.4K40

    C++ 里的“数组”

    C++ 的解决方案 C++ 有两种常用的替换 C 数组的方式: vector array vector C++ 标准模板库(STL)的主要组成部分是: 容器 迭代器 算法 函数对象 而说到容器,我们通常第一个讨论的就是...C++ 里有更接近数学里向量的对象,名字是valarray(很少有人使用,我也不打算介绍)。 vector 的成员在内存里连续存放。...随即我们展示了 C++ 里通用的使用迭代器遍历的做法,对其中的内容进行累加。最后输出结果。 当一个容器存在 push_… 和 pop_… 成员函数时,说明容器对指定位置的删除和插入性能较高。...vector 适合在尾部操作,这是它的内存布局决定的(它只支持 push_back 而不支持 push_front)。...vector 的一些重要操作(如 push_back)试图提供强异常安全保证,即如果操作失败(发生异常)的话,vector 的内容完全不发生变化,就像数据库事务失败发生了回滚一样。

    11610

    从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr、实现Ptr_vector

    比如说int,C++中的内置类型都是值语义,前面学过的三个标准库类型string,vector,map也是值语义 2、对象语义指的是面向对象意义下的对象 对象拷贝是禁止的(Noncopyable)...的时候就出错了,查看push_back 的声明: void push_back(const _Ty& _Val); 即参数是const 引用,在函数内部拷贝时不能对右操作数进行更改,与第3点冲突,所以编译出错...考虑这样一种情形: vec.push_back(node.release()); 当node.release() 调用完毕,进而调用push_back 时,由这里知道,push_back 会先调用operater...push_back(val); 成功(operator new 成功),那么局部智能指针对象释放裸指针的所有权;如果 std::vector::push_back(val); 失败(operator...参考: C++ primer 第四版 Effective C++ 3rd C++编程规范

    68910

    从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr、实现Ptr_vector

    比如说int,C++中的内置类型都是值语义,前面学过的三个标准库类型string,vector,map也是值语义 2、对象语义指的是面向对象意义下的对象 对象拷贝是禁止的(Noncopyable)...的时候就出错了,查看push_back 的声明: void push_back(const _Ty& _Val); 即参数是const 引用,在函数内部拷贝时不能对右操作数进行更改,与第3点冲突,...考虑这样一种情形: vec.push_back(node.release()); 当node.release() 调用完毕,进而调用push_back 时,由这里知道,push_back 会先调用operater..._ Ptr_vector 继承自vector 类,重新实现push_back 函数,插入裸指针时,先用局部智能指针对象接管裸指针所有权,如果 std::vector::push_back(val...参考: C++ primer 第四版 Effective C++ 3rd C++编程规范

    1.8K00

    2.1 C++ STL 数组向量容器

    Vector容器是C++ STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。...使用push_back()函数向容器中添加元素4,并使用MyPrint()函数输出结果。使用pop_back()函数弹出容器中的一个元素,并再次使用MyPrint()函数输出结果。...使用push_back()函数分别将"django"和"python"元素加入到容器的末尾,使用pop_back()函数弹出容器的末尾元素。...(p1); ary[1].push_back(p2); ary[2].push_back(p3); for (int x = 0; x ...代码中定义了MyAnimal类,并分别实例化了pDog、pMonkey和pSnake三个成员,通过使用push_back()函数将这三个对象指针加入到var中,最后通过使用遍历的方法输出该迭代器中的所有元素

    20130

    从零开始:实现你的第一个 C++ Vector

    这里我并没有实现reserve,reserve是预扩容函数,我们后面实现,还有一个push_back也没有实现,后面我们也将实现这个函数,这里先复用。...在这个过程中,我们学习了动态内存分配、指针操作、拷贝控制等 C++ 核心概念,并将它们应用于实际的容器实现中。...通过手动实现 push_back、pop_back、resize 等函数,我们深入了解了向量的内部工作原理。 这篇博客不仅仅是一个容器的模拟实现,更是一个 C++ 学习的过程。...但是,通过这个实践,我们不仅能更好地理解标准库中容器的工作原理,也能更深入地理解 C++ 语言本身。...希望这篇博客能为你带来收获,也希望你能在学习 C++ 的道路上不断前行,探索更多有趣和有挑战的领域!

    7610

    从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

    下面是模仿VC6.0 中vector 的实现写的Vec 类,程序主要参考《Accelerated C++》 ,略有修改,比如将接口修改成与VC6.0 一致, 这样做的好处是可以传递第二个参数,也就是说可以自己决定内存的分配管理方式...第三次调用push_back,也一样分配三块内存,将t1, t2 拷贝下来,然后分别析构,最后将t3 拷贝上去。...输出的次数是一致的,只是拷贝的顺序有所不同而已,比如第二次调用push_back 的时候,VC2008 中的vector 是先拷贝t2, 接着拷 贝t1, 然后将t1 释放掉。...从上面的分析也可以看出,当push_back 的时候往往带有拷贝和析构多个操作,所以一下子分配比size() 大的空间capacity,可以减轻频繁操作造成的 效率问题。...参考: C++ primer 第四版 Effective C++ 3rd C++编程规范 Accelerated C++

    1.3K00
    领券