• STL


    1.顺序容器

    与内置数组相比,array是一种更安全、更容易使用的数组类型。

    forward_list的设计目标是达到与最好的手写的单向链表数据结构相当的性能。因此,forward_list没有size操作。对其他容器而言,size保证是一个快速的常量时间的操作。

    顺序容器 性能
    vector 可变大小数组,支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢
    deque 双端队列,支持快速随机访问,在头尾位置插入/删除元素速度很快
    list 双向链表,支持双向顺序访问,在list中任何位置进行插入/删除元素速度很快
    forward_list 单向链表,只支持单向顺序访问,在链表任何位置进行插入/删除速度很快
    array 固定大小数组,支持快速随机访问,不能添加或删除元素
    string 与vector相似,随机访问快,在尾部插入/删除快

    2.容器库概览

    2.1迭代器

    迭代器是一个变量,可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

    一般来说我们无须知道迭代器的精确类型,实际上,使用iterator和const_iterator来表示迭代器的类型。const_iterator和常量指针差不多,能读取但不能修改它所指的元素值。

    解引用迭代器可以获得迭代器所指的对象。

    4.vector对象是如何增长的

    为了支持快速随机访问,vector将元素连续存储。

    减少容器空间重新分配次数的策略:

    vector和string的实现通常会分配比新的空间需求更大的内存空间。容器预留这些空间作为备用,可用来保存更多的新元素。这样,就不需要每次添加新元素都重新分配容器的内存空间了。

    管理容量的成员函数:

    c.shrink_to_fit():请将capacity()减少为与size()相同大小,可以调用shrink_to_fit来要求容器退回不需要的内存空间。

    c.capacity():不重新分配内存空间的话,c可以保存多少个元素

    c.reserve(n):分配至少能容纳n个元素的内存空间。reserve并不改变容器中元素的数量,它仅影响vector预先分配多大的内存空间。

    c.resize():只改变容器中元素的数目,而不是容器的容量。

    vector<int> nums;
    cout << "nums:size = " << nums.size() << "  nums:capacity = " << nums.capacity() << endl;
    //输出:nums:size = 0  nums:capacity = 0
    for(int i = 0; i < 24; ++ i) nums.push_back(i);
    cout << "nums:size = " << nums.size() << "  nums:capacity = " << nums.capacity() << endl;
    //输出:nums:size = 24  nums:capacity = 32 
    nums.reserve(50); //将capacity设定为至少50,可能会更大
    cout << "nums:size = " << nums.size() << "  nums:capacity = " << nums.capacity() << endl;
    //输出:nums:size = 24  nums:capacity = 50
    nums.shrink_to_fit();//要求归还内存
    cout << "nums:size = " << nums.size() << "  nums:capacity = " << nums.capacity() << endl;
    //输出:nums:size = 24  nums:capacity = 24 
    

    原则:只有当迫不得已时才可以分配新的内存空间。

  • 相关阅读:
    android 添加特定IP走局域网
    EF CORE 使用排他锁 干货 方法 悲观锁 entity framework 悲观锁
    VS C# xamarin 开发android 调试正常 发布分发后运行闪退出错
    .NET CORE 1.1 迁移到.NET 2.0正式版
    C# .NET Winform等程序一运行就闪退 不同环境 换到其他电脑,例如XP之类的解决方法。
    Cnblogs自定义皮肤css样式-星空观测者
    在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)
    适配各种Windows分辨率,为DPI添加感知,当在高DPI时,禁用WINFORM缩放等。
    为WIN8 APP创建置顶desktop应用
    React-Native 系列视频失效补链及一些碎碎念
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12393260.html
Copyright © 2020-2023  润新知