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
    评论
`std::vector` 是 C++ STL 中的一个容器,用于存储动态数组。它可以自动扩容和缩容,可以在数组的任何位置插入或删除元素。以下是使用 `std::vector` 的一些常见方法: 1. 创建向量 可以使用以下语法创建一个空向量: ``` std::vector<int> vec; ``` 也可以使用以下语法创建一个具有初始大小和值的向量: ``` std::vector<int> vec(5, 0); // 创建大小为5的向量,并将每个元素初始化为0 ``` 2. 访问向量元素 可以使用下标运算符 `[]` 或 `at()` 方法访问向量中的元素。例如: ``` std::vector<int> vec = {1, 2, 3, 4, 5}; int x = vec[2]; // x 等于 3 int y = vec.at(4); // y 等于 5 ``` 注意,使用 `at()` 方法访问不存在的元素会抛出 `std::out_of_range` 异常。 3. 向向量中添加元素 可以使用 `push_back()` 方法将元素添加到向量的末尾: ``` std::vector<int> vec = {1, 2, 3}; vec.push_back(4); ``` 也可以使用 `insert()` 方法在向量的任意位置添加元素: ``` std::vector<int> vec = {1, 2, 3}; auto it = vec.begin() + 1; vec.insert(it, 4); ``` 注意,`insert()` 方法需要传入一个迭代器,指定插入的位置。 4. 从向量中删除元素 可以使用 `pop_back()` 方法从向量的末尾删除元素: ``` std::vector<int> vec = {1, 2, 3}; vec.pop_back(); ``` 也可以使用 `erase()` 方法从向量的任意位置删除元素: ``` std::vector<int> vec = {1, 2, 3}; auto it = vec.begin() + 1; vec.erase(it); ``` 注意,`erase()` 方法需要传入一个迭代器,指定删除的位置。 5. 获取向量大小和容量 可以使用 `size()` 方法获取向量中元素的数量: ``` std::vector<int> vec = {1, 2, 3}; int n = vec.size(); // n 等于 3 ``` 可以使用 `capacity()` 方法获取向量的容量: ``` std::vector<int> vec = {1, 2, 3}; int m = vec.capacity(); // m 大于等于 3 ``` 注意,向量的容量可能会大于元素的数量,因为它预留了一些额外的空间以便于扩容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值