• STL学习笔记1--vector


    C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合。包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等。STL提供了以下三类数据结构的实现:

      标准容器类:

    顺序性容器
    vector 从后面快速插入和删除,直接访问任何元素
    deque 从前面或后面快速插入和删除,直接访问任何元素
    list 双链表,从任何地方快速插入和删除
    容器适配器
    statck 后进先出
    queue 先进后出
    priority_queue 最高优先级元素总是第一个出列
    关联容器
    set 快速查找,不允许重复值
    multiset 快速查找,允许重复值
    map 一对多映射,基于关键字快速查找,不允许重复值
    multimap 一对多映射,基于关键字快速查找,允许重复值

       

         现在开始具体解释:

      1、vector

      vector容器就相当于一个数组,但其大小可以不可预先指定,并且自动扩展,完全可以把它看成一个动态数组。在创建一个vector后,它会在内存中分配一块连续的内存空间进行数据存储,初始的大小可以预先制定也可以由vector默认指定。当内存使用完后它会自动增加内存。并且这个过程比较耗时,如下:

        首先,vector 会申请一块更大的内存块;

        然后,将原来的数据拷贝到新的内存块中;

        其次,销毁掉原内存块中的对象(调用对象的析构函数);

        最后,将原来的内存空间释放掉。

      构造函数

        vector<int> v1; //构造一个空的vector
        vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector

      常用函数

        at()  返回指定位置的元素 

        push_back()  在Vector最后添加一个元素 

        size()  返回Vector元素数量的大小 

      代码示例如下:其中一定要包含头文件vector

     1 //vector.cpp
     2 #include "vector"
     3 #include "iostream"
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     vector <int> arr;//声明一个元素类型为int的容器
     9     for (int i=0;i<arr.size();i++)//size()返回当前容器的元素个数
    10     {
    11         arr.push_back(i);//向容器末尾添加元素
    12     }
    13     for (int i=0;i<10;i++)
    14     {
    15         cout<<arr.at(i)<<"	";//获取指定位置的元素的值
    16     }
    17     getchar();
    18     return 0;
    19 }

      resize() 改变Vector元素数量的大小
        void resize( size_type size, TYPE val ); //改变当前vector的大小为size,且对新创建的元素赋值val

    arr.resize(20,22);//改变当前vector的大小为20,且对新创建的元素赋值22

      back()  返回最末一个元素 ,如下:

    1 cout<<arr.back()<<endl;//取最后一个元素输出

      capacity()  返回vector所能容纳的元素数量(在不重新分配内存的情况下)

    cout<<arr.capacity()<<endl;// 返回vector所能容纳的元素数量(在不重新分配内存的情况下) 

      empty()  判断Vector是否为空(返回true时为空) 

    1     if(arr.empty())//判断Vector是否为空(返回true时为空) 
    2     {
    3         cout<<"vector is empty!";
    4     }
    5     else
    6         cout<<"vector is  not empty!";

      clear()  清空所有元素 

        arr.clear();//清空所有元素,之后可以判断一下是否清空

      max_size()  返回Vector所能容纳元素的最大数量(上限) 

      cout<<"Vector所能容纳元素的最大数量(上限) :"<<arr.max_size()<<endl;//Vector所能容纳元素的最大数量(上限)

       swap()  交换两个Vector经过测试,两个容器的大小对交换结果没有影响,不论谁大,都不影响。

      swap(arr,arr2);//交换两个容器中的内容

      pop_back()  移除最后一个元素 

      arr.pop_back();//移除最后一个元素 

      front()  返回第一个元素的引用 

      cout<<arr.front()<<endl;//front()  返回第一个元素的引用 

      begin()  返回第一个元素的迭代器 

      end()  返回最末元素的迭代器(译注:实指向最末元素的下一个位置) 

      insert()  插入元素到Vector中 

        iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,

        void insert( iterator loc, size_type num, const TYPE &val );   //在指定位置loc前插入num个值为val的元素

        void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素 

      erase()  删除指定元素 

        iterator erase( iterator loc );//删除loc处的元素
        iterator erase( iterator start, iterator end );//删除start和end之间的元素

     1     vector <int>::iterator it;//声明一个迭代器
     2     it = arr.begin();//指向第一个元素的迭代器
     3     arr.erase(it);//删除指定位置的元素
     4 //    arr.erase(it,it+4);//删除某一区间的元素
     5     for (int i=0;i< arr.size();i++)
     6     {
     7         cout<<arr.at(i)<<"	";// 返回指定位置的元素 
     8     }
     9     cout<<endl;
    10     it = arr.begin();
    11 //    arr.insert(it,0);//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
    12     arr.insert(it,3,99); //在指定位置it前插入3个值为99的元素 
    13     for (int i=0;i< arr.size();i++)
    14     {
    15         cout<<arr.at(i)<<"	";// 返回指定位置的元素 
    16     }

      reserve()  设置Vector最小的元素容纳数量 

      arr.reserve(20);//为当前vector预留至少共容纳size个元素的空间 
  • 相关阅读:
    Solaris 11 让 ls 的输出 带上颜色
    Solaris11 Vsphere client tool 的鼠标问题
    VNC Viewer连接Cent OS 时的 复制粘帖 功能
    vSphere Client的拷贝 粘帖 功能
    更改CentOS7登录画面的分辨率
    一个故意消耗内存的java程序MemoryEater
    安装CentOS7文字界面版后,无法联网,用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
    windows 安装 Redis
    centos 安装postgresql 完整版
    centos 7 官网安装 PostgreSQL
  • 原文地址:https://www.cnblogs.com/songliquan/p/3307488.html
Copyright © 2020-2023  润新知