STL-Vector容器详解(二)

各位欢迎回来

参考 cppreference:https://zh.cppreference.com/w/cpp/container/vector
讲解说明:我会按照网站上的顺序结合自己的理解挑重点讲解

4.迭代器

小科普
迭代器是模拟C++语言的指针和下标,它的出现,使容器和下标分离,减少了的标准库冗余。
这样负责容器的研究人员研究容器,负责迭代器的研究人员研究迭代器,只要接口(函数形参和返回值)一致就可以。

使用迭代器的第一步引入iterator库
第二步创建迭代器

这就好比你创建容器以iterator为例创建指向int类型变量的迭代器
std::iterator ptr;
这还没完,为了使用它你需要将容器的位置交给迭代器,将迭代器和容器关联到一起(也就是调用返回值为迭代器类型的函数,然后将返回值赋给迭代器)

  • begin、cbegin、end、cend

    这里以begin、cbegin为例
    上图我们看到begin指向vector容器的第一个元素,而end指向vector容器最后一个元素的下一位置。不只是vector,STL中所有容器和许多非标准库都遵循前闭后开( [begin, end) )的原则
    cbegin、cend指的是迭代器(const_iterator)本身是const迭代器被赋值后就不能修改了,但是你能修改迭代器所指向元素的值,此外 ++迭代器依然好使。类似指针常量,自行科普顶层const和底层const的区别。

  • rbegin、rend

    这里r的含义是逆。也就是说rbegin、rend正好和begin、end截然相反

rbegin指向容器的最后一个元素,rend指向第一个元素的前一个位置

不但如此,与迭代器的配套操作也是相反的,就比如++逆向迭代器(reverse_iterator),会使逆向迭代器指向前一个位置
这个概念同样在STL都是通用的,你可以这样认为STL就是要建立这样一个标准的同一的规范,为了减少程序员的工作量,使他们专注于思想和逻辑,而不是繁琐的底层实现。

  • 迭代器非法化表

    1. 容量and大小

    容量==大小嘛?
    当然不,容量是申请的空间的多少,大小是已经被使用的申请空间的多少
    容量>=大小

  • size、max_size、capacity

    size返回的大小的值,capacity返回容量的值
    max_size指出vector容器所能容纳元素数量的极限值,它的值依赖于计算机内存的大小还有操作系统等等。

  • reserve、shrink_to_fit

    reserve为容器重新分配容量,但是只能比size的值大,如果小于size分配失败啥也不干,就是扩容的

    shrink_to_fit从新分配容量,减去没有填充元素的未利用位置,减容的
    也正是因为这俩函数重新分配了内存迭代器(类似指针)当然也就失效了

感谢大家的收看

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务