STL库:vector用法

1、vector: 向量,也称为“变长数组”即长度根据需要自动改变的数组。

在使用时需要添加vector头文件与“using namespace std”,即#include<vector>

using namespace std

2、vector定义

vector<typename> name ; //typename为数据类型,name为变量名

vector<int> vi; //定义了一个以int为数据类型的向量(变长数组)vi,类似于定义 int v[n],vi无需设置长度及长度可变

vector<int> name;

vector<double> name;

vector<char> name;

vector<node> name; //node 为结构体类型

3、vector容器内元素的访问

(1)通过迭代器(iterator)访问

vector<typename>::iterator it;

这样it就是一个vector<typename>::iiterator 型的变量

 

vector<int> ::iterator it;

vector<double> : : iterator it;

这样就得到了迭代器it,并且可以通过*it来访问vector里的元素

具体程序如下:

#include <stdio.h>

#include  <vector>

using namespace std;



int main()

{

vector <int>  vi;

for(int i=1;i<=5;i++)

{

vi.push_back(i);

}

for(vector <int>::iterator it=vi.begin();it!=vi.end();it++)

{

printf("%d ",*it);

}

return 0;

}

 

4、末尾添加元素与末尾删除元素

(1)pushu_back( ) : pushu_back( x ) 就是在vector 后面添加一个元素x,时间复杂度为O(1)。

(2) pop_back( ): pop_back( ) 用以删除vector的尾部元素,时间复杂度为O(1)。
 

#include<stdio.h>

#include<vector>

using namespace std;

int main()

{

vector<int> vi;

for(int i=1;i<=5;i++)

{

vi.push_back(i);

}

for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)

{

printf("%d ",*it);

}



vi.pop_back();//删除末尾元素5



for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)

{

printf("%d ",*it);

}

return 0;

}

5、获取vector对象的元素个数

size()用来获取vector中元素的个数,时间复杂度为O(1)。size()返回的是unsigned类型,不过一般不会来说用%d不会出现很大的问题。

6、清空vector中的所有元素

clear()用来清空vector中的所有元素,时间复杂度为O(N),其中N为vector中元素的个数。

示例如下:

#include<stdio.h>

#include<vector>

using namespace std;

int main()

{

vector<int> vi;

for(int i=1;i<+3;i++)

{

vi.push_back(i);

}



printf("%d ",vi.size());



vi.clear();



printf("%d \n",vi.size());



return 0;

}

 

7、vector的元素插入

insert(it,x)用来向vector的任意迭代器it出插入一个元素x,时间复杂度O(N)。这里需要注意编写程序时序列编号从0开始,而插入位置时,序号从1开始。

示例如下:

#include<stdio.h>

#include<vector>

using namespace std;



int main()

{

vector<int> vi;

for(int  i=1; i<=5 ;i++)

{

vi.push_back(i);

}

vi.insert(vi.begin()+2,-1);   //在vi的第三个位置上插入-1

for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)

{

printf("%d ",*it); //1,2,-1,3,4,5

}



//另一种遍历方法

//for(int i=0 ; i<vi.size() ; i++)

//{

// printf("%d ",vi[i]);

//}



return 0;

}

 

8、删除元素:erase()

erase()有两种用法:删除单个元素、删除一个区间内的所有元素。

(1)删除单个元素

erase(it)即删除迭代器为it处的元素

示例如下:
 

#include<stdio.h>

#include<vector>

using namespace std;



int main()

{

vector<int> vi;

for(int i=5;i<=9;i++)

{

vi.push_back(i);  //插入5,6,7,8,9

}

//删除8

vi.erase(vi.begin()+3);

for(vector<int>::iterator it=vi.begin(); it!=vi.end();it++)

{

printf("%d ",*it);

}

return 0;

}

(2)删除一个区间内的所有元素

erase(first,last)即删除[first,last)内的所有元素,左闭右开。

示例如下:

#include<stdio.h>

#include<vector>

using namespace std;



int main()

{

vector<int> vi;

for(int i=5;i<=9;i++)

{

vi.push_back(i);  //插入5,6,7,8,9

}

//删除8

vi.erase(vi.begin()+1,vi.begin()+4);  //删除6,7,8,

for(vector<int>::iterator it=vi.begin(); it!=vi.end();it++)

{

printf("%d ",*it);

}

return 0;

}

参考书籍:《算法笔记》 胡凡 曾磊   p191-197

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值