本文参考菜鸟教程,作为学习笔记,方便日后查阅。

介绍

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组

特性

  1. 顺序序列
    顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
  2. 动态数组
    支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
  3. 能够感知内存分配器的(Allocator-aware)
    容器使用一个内存分配器对象来动态地处理它的存储需求。

内存分配

vector可以简单理解成为动态数组,里面有一个指针指向一片连续的内存空间(堆空间),当空间不够装下数据时会自动申请另一片更大的空间,然后把原有数据拷贝过去,接着释放原来的那片空间;当释放或者说是删除里面的数据时,其存储空间并不会释放,仅仅只是清空了里面的数据。

常见的vector的函数:
构造函数(定义数据)
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
增加函数(添加数据)
void push_back(const T& x):向量尾部增加一个元素X
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
删除数据
iterator erase(iterator it):删除向量中迭代器指向元素
iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素
遍历数据
reference at(int pos):返回pos位置元素的引用
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
判断函数
bool empty() const:判断向量是否为空,若为空,则向量中无元素
大小函数
int size() const:返回向量中元素的个数
int capacity() const:返回当前向量所能容纳的最大元素值
int max_size() const:返回最大可允许的vector元素数量值
其他函数
void swap(vector&):交换两个同类型向量的数据
void assign(int n,const T& x):设置向量中前n个元素的值为x
void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素
迭代器遍历数据
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;int main()
{//顺序访问vector<int>obj;for(int i=0;i<10;i++){obj.push_back(i);   } cout<<"直接利用数组:"; for(int i=0;i<10;i++)//方法一 {cout<<obj[i]<<" ";}cout<<endl; cout<<"利用迭代器:" ;//方法二,使用迭代器将容器中数据输出 vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 for(it=obj.begin();it!=obj.end();it++){cout<<*it<<" ";}return 0;
}
定义二维数组
方式1
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;int main()
{int N=5, M=6; vector<vector<int> > obj(N); //定义二维动态数组大小5行 for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0 { obj[i].resize(M); } for(int i=0; i< obj.size(); i++)//输出二维动态数组 {for(int j=0;j<obj[i].size();j++){cout<<obj[i][j]<<" ";}cout<<"\n";}return 0;
}
方式2
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;int main()
{int N=5, M=6; vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列 for(int i=0; i< obj.size(); i++)//输出二维动态数组 {for(int j=0;j<obj[i].size();j++){cout<<obj[i][j]<<" ";}cout<<"\n";}return 0;
}

vector容器详细介绍相关推荐

  1. [C++STL]vector容器用法介绍

    代码如下: #include <iostream> #include <string> #include <vector> using namespace std; ...

  2. WEB应用容器详细介绍

    各个容器 Web容器 web容器(web服务器)主要有:Apache.IIS.Tomcat.Jetty.JBoss.webLogic等,而Tomcat.Jetty.JBoss.webLogic同时也是 ...

  3. Spring容器详细介绍

    Spring容器 文章目录 一.Spring容器是什么,有什么作用? 二.如何让给Spring传递信息 1xml 2.java代码 3.注解 @component @controller @Servi ...

  4. C++语言vector容器介绍和示例

    之前我们在声明数组的时候,采用的是datatype  array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我喜欢简单的方法 ...

  5. vector容器介绍

    Vector概念 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法). vector尾部添加或移除元素非常快速,但 ...

  6. STL vector 容器介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  7. STL vector 容器介绍 (转载)

    STL vector 容器介绍<?xml:namespace prefix = o /> A Presentation of the STL Vector Container (By Ni ...

  8. vector 容器 动态数组总结

    vector 容器 动态数组总结 二话不说直接上代码 #include <vector> #include <algorithm> #include <iostream& ...

  9. vector容器的用法

    转自一篇博客^-^: 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.p ...

最新文章

  1. vue实现卡片式上下滑动_基于Vue.js仿制探探卡片左右滑动特效
  2. Python 中strip()方法怎么用?
  3. MYSQL编写过程和解析过程的差异
  4. 最全!最完整的递归下降分析法代码!!! (实验报告,代码)
  5. XSS与CSRF两种跨站攻击比较
  6. Javascript处理时间
  7. TechNet Plus订阅版再度推出6折优惠
  8. AcWing 1750. 救生员(差分+暴力枚举)
  9. 物联网云平台将成为产业生态的核心
  10. Fluent Mybatis 牛逼
  11. 【Android 】零基础到飞升 | Service初涉
  12. java.sql.SQLException: is unrecognized or represents more than one time zone. You must configure
  13. 计算机教案检查结果评语,评论教学设计评语(多篇).docx
  14. 考研高等数学公式(数学一)
  15. Block学习-关于Block是如何实现的,以及block中参数传递
  16. uniapp开发安卓APP测试实现微信支付(初学者都能轻松get)
  17. HTML中使用vlc插件
  18. 手把手教你打造一个排队叫号系统
  19. cr2 android,CR2 文件扩展名: 它是什么以及如何打开它?
  20. 100条养生常识,比黄金还值钱!快转给朋友看看!

热门文章

  1. PLSQL Developer中test window的使用
  2. virtualbox+vagrant学习-3-Vagrant Share-5-Security
  3. HUABASE :基于列存储的关系型数据库系统
  4. unity的inputField文本框赋值问题
  5. python之设计模式的装饰器9步学习
  6. angularjs中的数据绑定
  7. Cisco VTP protocol   实验笔记
  8. 微软Windows Server 2008认证体系详细介绍
  9. APT/APT-GET常用信息
  10. vue2 递归组件--树形