zoukankan      html  css  js  c++  java
  • 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 
    

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

  • 相关阅读:
    Windows系统环境变量path优先级测试报告
    URI和URL的区别
    智能引导式报错(Class file name must end with .class)
    【Algorithm】冒泡排序
    【C语言】练习2-9
    【C语言】练习2-8
    【C语言】练习2-1
    【C语言】练习1-23
    【C语言】练习1-22
    【C语言】练习1-21
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12393260.html
Copyright © 2011-2022 走看看