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

版权声明:欢迎评论与转载,转载时请注明出处! https://blog.csdn.net/wjl_zyl_1314/article/details/84309841

一、向量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[]         // 返回容器中指定位置的一个引用。

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

猜你喜欢

转载自blog.csdn.net/wjl_zyl_1314/article/details/84309841
今日推荐