码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记之STL标准库(三)vector容器

时间:2018-04-15 11:37:19      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:允许   fun   一个   bubuko   个数   迭代器   reverse   ima   向量   

模板类vector是一个封装了动态大小数组的顺序容器,它所控制的序列是以连续数组的方式存储的。跟任意其它类型容器一样,它能够存放各种类型的对象。

包含头文件#include <vector>  声明命名空间using namespace std;

特性:

  1)顺序序列:容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

  2)动态数组:支持对序列中的任意元素进行快速直接访问。操供了在序列末尾相对快速地添加/删除元素的操作。

  3)能够感知内存分配器的(Allocator-aware):容器使用一个内存分配器对象来动态地处理它的存储需求。

使用方法:

1)构造函数

  vector(); //创建一个空的vector  如:vector<int> a;

  vector(int nSize); //创建一个空的vector,元素个数为nSize 如:vector<int> a(10);

  vector(int nSize,const T& val); //创建一个vector,元素个数为nSize,且值都为val 如:vector<string> a(5,"have fun");

  vector(const vector&); //拷贝(复制)构造函数

    如:vector<string> a(5,"have fun"); 

      vector<string> b(a);

  vector(begin,end); //复制另一个数组[begin,end)区间内的元素到vector中

    如:int ia[6] = { -2, -1, 0, 1, 2, 1024 }; 

      vector<int> a(ia,ia+6);

2)插值函数

  void push_back(const T& x); //向量尾部增加一个元素X

    如: vector<string> a(5,"have fun");
       a.push_back("good luck");
       for(int i=0;i<a.size();i++)
       {
         cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,const T& x); //向量中迭代器指向元素前增加一个元素x

    如: vector<string> a(5,"have fun");
       a.insert(a.begin()+2,"good luck");
       for(int i=0;i<a.size();i++)
       {
         cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,int n,const T& x); //向量中迭代器指向元素前增加n个相同的元素x

    如: vector<string> a(5,"have fun");
       a.insert(a.begin()+2,2,"good luck");
       for(int i=0;i<a.size();i++)
       {
            cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,const_iterator first,const_iterator last); //向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

    如: vector<string> a(5,"have fun");
       vector<string> b(2,"good luck");
       a.insert(a.begin()+2,b.begin(),b.end());
       for(int i=0;i<a.size();i++)
       {
            cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

3)删除函数

  iterator erase(iterator it); //删除向量中迭代器指向元素;

    如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
       vector<string> a(str,str+7);
       a.erase(a.begin()+2);
       for(int i=0;i<a.size();i++)
       {
            cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  iterator erase(iterator first,iterator last); //删除向量中[first,last)中元素,注意last是指向要删除的最后一个元素的下一个元素;

    如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
       vector<string> a(str,str+7);
       a.erase(a.begin()+2,a.begin()+4);
       for(int i=0;i<a.size();i++)
       {
            cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  void pop_back(); //删除向量中最后一个元素;

    如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
          vector<string> a(str,str+7);
       a.pop_back();
       for(int i=0;i<a.size();i++)
       {
            cout<<a[i]<<endl;
       }

      程序输出:技术分享图片

  void clear(); //清空向量中所有元素,功能等同于erase(vector.begin(),vector.end());

4)遍历函数

  reference at(int pos); //返回pos位置元素的引用

  reference front(); //返回首元素的引用

  reference back(); //返回尾元素的引用

  iterator begin(); //返回向量头指针,指向第一个元素

  iterator end(); //返回向量尾指针,指向向量最后一个元素的下一个位置

  reverse_iterator rbegin(); //反向迭代器,指向最后一个元素

  reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置

5)判断函数

  bool empty() const:判断向量是否为空,若为空,则返回true

6)大小函数  

  void resize(size_type n); //将向量的元素调整到n个,多删少补,值随机

  void resize(size_type n,T& x); //将向量的元素调整到n个,多删少补,值为x

  void reserve(size_type n); //将分配给向量的存储空间大小设置为n,注意不能超过max_size

  int size() const; //返回当前向量中元素的个数

  int capacity() const; //返回当前分配给向量的存储空间的大小

  int max_size() const; //返回最大可允许的vector元素数量值

    如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
       vector<string> a(str,str+7);
       a.pop_back();
       cout<<a.size()<<endl;
       cout<<a.capacity()<<endl;
       cout<<a.max_size()<<endl;

    程序输出:技术分享图片

7)其他函数

  void swap(vector&); //交换两个同类型向量的数据

  void assign(int n,const T& x); //设置向量中第n个元素的值为x

  void assign(const_iterator first,const_iterator last); //把向量中[first,last)的元素设置成当前向量元素

8)常用算法

  排序:sort(a.begin(),a.end()); //对vector a中序列[begin,end)的元素进行从小到大排列

  反转:reverse(a.begin(),a.end()); //对vector a中序列[begin,end)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1

  复制:copy(a.begin(),a.end(),b.begin()+1); //把vector a中序列[begin,end)的元素复制到b中,从b.begin()+1的位置开始复制,覆盖掉原有元素

  查找:find(a.begin(),a.end(),10); //在vector a中序列[begin,end)的元素中查找10,若存在返回其在向量中的位置

C++学习笔记之STL标准库(三)vector容器

标签:允许   fun   一个   bubuko   个数   迭代器   reverse   ima   向量   

原文地址:https://www.cnblogs.com/jason-20160301/p/8834378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!