欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++中向量vector的基本操作及用法

程序员文章站 2022-03-22 21:44:29
...

一、向量vector介绍
vector属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型。可以看成是一个可以装载各种数据类型的动态数组(可以看成加强版数组)。动态数组就是动态分配内存的数组,不想普通的数组声明时就向系统申请固定的空间。
二、vector的声明及初始化
c++中必须要包含#include <vector>

#include <vector>
vector <T> vec;//T为各种数据类型,可以是基本类型,也可以是自己定义的数据类型
vector <T> vec[20];//定义了一个二维数组,vec[i]就是一个vector<T>动态数组

不难看出看出vector是一个模板类
更多初始化方式


        vector<int> a ;                                //声明一个int型向量a
        vector<int> a(10) ;                            //声明一个初始大小为10的向量
        vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量
        vector<int> b(a) ;                             //声明并用向量a初始化向量b
        vector<int> b(a.begin(), a.begin()+3) ;        //将a向量中从第0个到第2个(共3个)作为向量b的初始值
        //也可以通过以下方式初始化
        int n[] = {1, 2, 3, 4, 5} ;
        vector<int> a(n, n+5) ;              //将数组n的前5个元素作为向量a的初值
        vector<int> a(&n[1], &n[4]) ;        //将n[1] - n[4]范围内的元素作为向量a的初值

三、vector 输入输出及访问
直接用cin>>a[i】或者cout<<a[i]输入输出即可
四、vector的遍历
第一种方式(类似于数组遍历):

vector<int> a;
for(int i=0;i<a.size();i++)
{
  cin>>a[i];
  cout<<a[i];
}

第二种方式(vector迭代器遍历):

vector <int> a;
vector <int> :: iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
	cin>>*iter;
	cout<<*iter;
}

第三种方式(利用反向迭代器遍历)

vector <int> a;
vector<int>::reverse_iterator iter;
for(iter=a.rbegin();iter=a.rend();iter++)
{
	cin>>*iter;
	cout<<*iter;
}

五、向量vector的基本函数

vector <int> a;
vector <int> b;
1. a.size() :返回向量a中元素的个数
2. a.empty() :判断向量a是否为空,空返回true
3. a.clear() :清空向量a的所有元素
4.a.insert():向向量a中插入
a.insert(pos,1000) :将1000插入到向量a的pos位置上。例:a.insert(a.begin(),1000) ;
a.insert(pos, n, 1000) :将1000分别插入到向量a的pos后n个位置上(包含pos)例:a.insert(a.begin(), 3, 1000) ; 
b.insert(b.begin(), a.begin(), a.end()) : 将a.begin(), a.end()之间的全部元素插入到b.begin()前
5.a.erase:删除向量a的元素
a.erase(pos): 删除向量a中pos位置的元素
a.erase(st,ed): 删除向量中从st到ed之间的元素
6.b.swap(a): 交换a、b向量
7.比较以及复制
比较:保持 ==、!=、>、>=、<、<= 的惯有含义 ;
复制:b=a 将a复制一份赋给b

六、更多函数

c.assign(beg,end)c.assign(n,elem)//将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。
c.at(idex)//传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()      // 传回最后一个数据,不检查这个数据是否存在。
c.begin()     // 传回迭代器中的第一个数据地址。
c.capacity()  // 返回容器中数据个数。
c.clear()     // 移除容器中所有数据。
c.empty()     // 判断容器是否为空。
c.end()       // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos)  // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)  //删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()     // 传回第一个数据。
get_allocator // 使用构造函数返回一个拷贝。
c.insert(pos,elem)    // 在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem)  // 在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值。
c.max_size()       // 返回容器中最大数据的数量。
c.pop_back()       // 删除最后一个数据。
c.push_back(elem)  // 在尾部加入一个数据。
c.rbegin()         // 传回一个逆向队列的第一个数据。
c.rend()           // 传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num)      // 重新指定队列的长度。
c.reserve()        // 保留适当的容量。
c.size()           // 返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2)        // 将c1和c2元素互换。同上操作。
operator[]         // 返回容器中指定位置的一个引用。

总结以方便你我!
若有未讲解清楚的或没有讲到的,欢迎评论留言!

相关标签: 向量vector