STL

C++ STL 反向迭代器适配器入门

反向迭代器适配器,又被称为反向迭代器或逆向迭代器(往后统一“反向迭代器”命名),顾名思义,就是用来逆序输出元素的。读者请牢牢记住,反向迭代器适配器的适配迭代器要么是双向迭代器,要么是随机迭代器,绝不可能是前向迭代器!其原因也可想而知,适配器只是对现有现有功能进行包装,无法为底层迭代器添加原本不支持的操作,比如forward_list这种前向迭代器,它原本就不支持--操作,就别指望forward_l

深入学习C++ STL set容器的迭代器

前面我们初识了set容器,本节将会详细介绍set容器的迭代器,set容器迭代器和map容器、multimap容器一样都是双向迭代器,只能进行++或--操作,不能进行随机访问。同此,set容器有正向迭代器begin()、end(),有反向迭代器rbegin()、rend(),还有常量迭代器cbegin()、cend()、crbegin()、crend(),(c表示const,可读不可改)。由于set

还有人不知道C++ STL vector容器的emplace_back()成员函数?

在前面的章节《初识STL中的vector容器》我们曾谈到vector插入元素的方法,想必大家只知道push_back()这个尾插函数吧,其实,在c++11后,vector还有一个尾插函数,那就是emplace_back(),en的意思是进入,place的意思是位置,emplace_back()就是放到最后面的意思。不是都有push_back()了吗,这么还会有emplace_back()呢?其实这

C++STL教程入门

C++STL教程入门在上一篇文章我们已经基本的了解了什么是C++的STL(标准模板库),在本章中绝大多数内容都是在介绍常用的STL模板的使用以及其一些参数的介绍,但是请注意,STL由于其设计之初就容纳了大量的程序员思维结……

C++ STL复制算法std::copy_backward()函数入门

前面一节我们学习了条件复制算法copy_if()函数,读者是否还记得它的功能是什么吗?没错,该函数能够根据条件筛选元素并复制到目标区域。本节我们将学习一个反向复制算法——copy_backward()函数。”back“意为”后面“,”forward“意为”朝某个方向“,”copy_backward“表示”从后面往前复制“,从名称就能看出,这个函数与常规复制方向不同,它从序列的末尾开始向开头进行复制

C++ STL unordered_map容器如何获取值(value)?

在基本掌握unordered_map容器及其迭代器的基础下,本节将带领读者一起学习如何获取unordered_map容器中元素的value。前面我们提到unordered_map容器和map容器一样都重载了'[]'符号,所以能够通过'[]'添加或查看value;还有find()输入key获取指向value的迭代器;其实我们还能通过at()、equal_range()

深度剖析C++ STL list容器的底层构造

在《初识STL库中的list容器》我们就曾明确谈到list容器是双向链表,每一个节点由两个指针和数据组成,两个指针分别指向前一个节点和后一个节点。长这样:链表属于相对简单的数据结构,我们也可以手搓一个简单链表:首先先创建一个结构体,包括数据域和指针域:structnode{intn;//数据域/*创建node指针初始值为空*/node*nex

C++ STL竟然有这么多个版本

自1998年ANSI/ISO C++标准正式确立,STL成为C++标准库的必备组件后,由于其开源特性与标准化接口,各大编译器厂商与开源社区纷纷基于标准规范,开发了各具特色的STL实现版本。这些实现均在遵循标准接口的前提下,针对性能、可移植性或特定平台进行了优化,其中具有代表性的包括HP STL、SGI STL、STLport、P.J. Plauger主导的PJ STL以及Rouge Wave ST

深入学习C++ STL map容器的成员函数emplace_hint()

前面我们简单提到过emplace_hint()这个插入函数,在能够巧用迭代器的情况下就能实现map高效插入元素。emplace_hint(hint,key,val)有3各参数,第一个是位置迭代器hint,第二个是key键值,第三个是val值。它的返回值为:如果成功插入返回插入元素对应的迭代器,否则返回hint。如何巧用迭代器?大多数情况下emplace_hint()都是进行批量元素插入。比如我要插

深入学习C++ STL vector容器的迭代器

在《什么是迭代器?》里我们就粗略地介绍了迭代器,现在,我们将会进行vector迭代器的深入学习,包括认识和实际操作迭代器。vector里的迭代器很简单!先说一下begin()、end(),这两个被称为正向迭代器;rbegin()、rend()被称为反向迭代器,这里r意思是reverse,反转的意思;还有cbegin()、cend()、crbegin()、crend(),这里c指的是const,意为