vector的学习(系统的学习)

首先讲一下vector,vector被称作向量容器,头文件要包括#include<vector>

可以考虑下面定义:

vector<int> x;

vector<char> y;

x和y分别是整形向量,字符型向量,他们都是空向量

下面介绍如何使用vector:

1、vector的初始化:

int n;

cin>>n;

vector<double>d(n),e(n,1.5);

d和e是两个double型向量,长度和容量都为n,但是d的n个元素被默认置为0,而e的n个元素被置为1.5,可以有下列代码验证

扫描二维码关注公众号,回复: 2669628 查看本文章
#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e3+10;
const int maxk=5e3+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{
    int n;
    cin>>n;
    vector<double>d(n),e(n,1.5);
    for(int i=0;i<n;i++) cout<<d[i]<<" ";
    cout<<endl;
    for(int i=0;i<n;i++) cout<<e[i]<<" ";
    cout<<endl;
    return 0;
}

2、下面介绍size和push_back,front,capacity,pop_back,back等用法

v.size:返回向量当前长度,也就是元素的个数。

v.push_back:在向量的尾部添加一个元素,当前长度加一,如果空间不够,则将容量扩大为原先容量的2倍

v.front:返回向量第一个元素

v.back:返回向量最后一个元素

v.capacity:返回向量中最多可容纳的元素数目

v.pop_back:删除向量的最后一个元素,并且长度减1

可以由下面代码验证:

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e3+10;
const int maxk=5e3+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{
    vector<char>v;
    int c=97;
    for(int i=0;i<5;i++) v.push_back(c+i);
    for(int i=0;i<v.size();i++) cout<<v[i]<<" ";//v.size=5,结果是a b c d e
    cout<<endl;
    cout<<v.size()<<" "<<v.capacity()<<endl;//结果是5 8,当前长度是5 可容纳8个元素
    v.pop_back();
    for(int i=0;i<v.size();i++) cout<<v[i]<<" ";//输出结果为a b c d ,因为已经删除最后一个元素了
    cout<<endl;
    cout<<v.front()<<" "<<v.back()<<endl;//结果是a d,第一个元素和最后一个元素
    cout<<v.size()<<" "<<v.capacity()<<endl;//结果是4 8,长度减1,但是容量不变
    return 0;
}

3、下面讲一下向量迭代器:iterator

STL提供成为迭代器的对象,他能够指向一个元素,存取那个元素的值,并能按一种与任何特定容器无关的方法(即一种通用机制)从容器中的一个元素移动到

另一个元素

向量的迭代器可以是指向元素的指针p,通过p引用vector中的元,也可以被实现指向向量起点的指针p加上一个位置值index

为了初始化一个向量迭代器,每个STL容器至少提供两个成员函数:begin(),end()。

begin():返回迭代器的值,该值是容器第一个元素的位置

end:返回迭代器的值,该值是容器最后一个元素的下一个的位置

迭代器的基本操作符:

++:将迭代器从当前位置移动到下一个元素的位置,可用前缀操作符,也可做后缀操作符

--:将迭代器从当前位置移动到前一个元素的位置,可用前缀操作符,也可做后缀操作符

*:存取迭代器所指的元素
=:两个相同类型的迭代器it1,it2,执行it1=it2,使得it1也指向it2的位置

==:两个类型相同的迭代器it1,it2,若他们指向同一个元素,则it1==it2返回true

!=:两个类型相同的迭代器it1,it2,若他们指向不同元素,则it1!=it2返回true

+,-,+=,-=:

[]:对迭代器it及整数n,it[n]返回从it的当前位置向前或向后n个元素的引用

下面的代码可以验证:

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e3+10;
const int maxk=5e3+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{
    vector<char>v;
    int c=97;
    for(int i=0;i<5;i++) v.push_back(c+i);
    vector<char>::iterator it1=v.begin(),it2=v.end();//申请两个迭代器,并初始化它们
    for(it1;it1!=it2;it1++) cout<<*it1<<" ";//结果是a b c d e
    cout<<endl;
    it1=v.begin();
    it1+=4;
    it2-=4;
    cout<<*it1<<" "<<*it2<<endl;//结果是e b
    it1++;
    it2--;
    cout<<*it1<<" "<<*it2<<endl;//结果是 a
    cout<<it2[1]<<" "<<it2[-1]<<endl;//结果是 b  输出后面的一个元素,前面的一个元素
    return 0;
}

4、下面是向量的插入和删除操作:

成员函数 push_back、pop_back、back都是在向量尾部进行操作的函数,一般情况下是在向量任何位置进行插入和删除操作,vector完成这些操作的函数有:

v.insert(it,a):在it指定元素前插入a

void insert(it,n,a):在it指定位置前插入n个a

v.erase(it):删除it指定的位置,返回指定元素的下一个元素的迭代器

v.erase(it1,it2):删除it1~it2-1之间的所有元素,返回最后一个被删除元素的下一个元素的迭代器

v.clear():删除所i有元素

下面代码可以验证:

猜你喜欢

转载自www.cnblogs.com/caijiaming/p/9454208.html