C++ STL-vector

C++ vector



前言

C++ 为使用者提供了标准模板库,里面封装了许多可以实现具体功能的容器,不需要费力去实现他们的细节而是直接调用函数来实现所需功能。其中对于数组中需要的功能进行封装后,诞生了 Vector。

Vector 虽然翻译为 向量 但是它是一个 长度可以根据需要而自动改变的数组,也就是动态数组

一、vertor 定义

如果要使用 vector 需要引入头文件 ,并且声明命名空间 std

#include <vector>

using namespace std;
vector<typename> name; //相当于 一位数组 name[size] ,只不过长度可以根据需要进行变化。
					   //这里的 typename 可以是任何类型,也可以是 STL 容器

//typename 为常规类型
vector<int>	Myint;
vector<double> Mydouble;
vector<node> Mynode; //node为结构体类型

//typename 为STL容器
vector<vector<int> > Myvector; //当typename 为STL容器时需注意:
                               // '>' 与 '>' 之间需要加空格,避免被编译器误认为位移操作 ">>"

二、vector常用函数

1.push_back():添加元素

时间复杂度为O(1)

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 10; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
	}
	
	for(int i = 0; i <= 10; i ++)
	{
		cout << Myint[i] << endl;
	}
	return 0;
}

输出结果:
在这里插入图片描述

2.size():获取元素个数

时间复杂度为O(1)

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 10; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
	}
	
	cout << Myint.size();
	return 0;
}

输出结果:
在这里插入图片描述

3.pop_back():删除尾元素

时间复杂度为O(1)

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 5; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
	}
	
	cout << "添加完后元素个数为:"<< Myint.size() << endl;

	for(int i = 0; i < 2; i ++)
	{
		Myint.pop_back();
		cout << "删除后元素个数为:" << Myint.size() << endl;
		for(int j = 0; j < Myint.size(); j ++ )
		{
			cout << Myint[j] << endl;
		}
	}
	
	
	return 0;
}

输出结果:
在这里插入图片描述

4.clear():清空所有元素

时间复杂度为O(N),N为元素个数。

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 10; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
	}
	
	cout << "元素总数:" << Myint.size() << endl;
	
	Myint.clear();
	cout << "元素总数:" << Myint.size() << endl;
	return 0;
}

输出结果:
在这里插入图片描述

5.insert():在任意迭代器处插入元素

时间复杂度为O(N)

什么是迭代器 : iterator

迭代器 iterator 可以理解成类似指针的东西。

vector迭代器定义
vector<typename>::iterator MyIterator; 
// 这样定义后 就有一个 vector<typename>::iterator 类型的变量 Myiterator
// Myiterator就是迭代器, 我们可以用 *Myiterator 来访问 vector 里的元素
begin():取首地址

vector<int> Myint;
vector<int>::iterator MyIterator; 
MyIterator = Myint.begin();
// 这样 MyIterator 就能访问到 Myint 的首元素地址
// *MyIterator 就能访问到 Myint 的首元素
insert() 插入实现

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 5; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
	}
	
	for(int i = 0; i < Myint.size(); i ++ )
	{
		cout << Myint[i];
	}
	
	cout << endl;
	vector<int>::iterator a = Myint.begin();
	Myint.insert(a , 9); // 首位插入 9 
	Myint.insert(a + 2, 8) // 第三位插入 8

	for(int i = 0; i < Myint.size(); i ++ )
	{
		cout << Myint[i];
	}
	return 0;
}

输出结果:
在这里插入图片描述

6.erase():删除单个元素 或 删除区间元素(需要迭代器)

时间复杂度为O(N)

删除单个元素

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 5; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
	}
	for(int i = 0; i < Myint.size(); i ++) cout << Myint[i];
	cout << endl;
	vector<int>::iterator a = Myint.begin();
	Myint.erase(a + 2);  //删除第三位元素
	
	for(int i = 0; i < Myint.size(); i ++)
	{
		cout << Myint[i] << endl;
	}
	return 0;
}

输出结果:
在这里插入图片描述

删除区间元素

代码如下(示例):

#include <iostream>
#include <vector>

using namespace std;

vector<int> Myint;
int main()
{
	for(int i = 0; i <= 5; i ++)
	{
		Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
	}
	for(int i = 0; i < Myint.size(); i ++) cout << Myint[i];
	cout << endl;
	
	vector<int>::iterator a = Myint.begin(); 
	Myint.erase(a + 1, a + 3);   //删除区间[2,3]的元素
	
	for(int i = 0; i < Myint.size(); i ++)
	{
		cout << Myint[i] << endl;
	}
	return 0;
}

输出结果:
在这里插入图片描述


本文章如有错误,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值