STL-向量Vector

一、简化概念

变长数组,倍增思想:和普通数组思想一样,只是长度可以根据需要进行更改,能自动扩大到当前数组大小的两倍(大部分情况下是两倍)

使用时需包含头文件,#include

其实质是一个动态数组,可以随时添加或删除元素;支持随机访问、在末尾添加元素、在任意位置插入或删除元素等操作,但在中间插入或删除元素会比较慢。

二、基本定义

vector<类型>变量名(长度, 初值) ,详细定义如代码

// 省略长度和初始值
vectorarr; 
vectorarr2;

// 只包含自定义长度
vector arr(10);
vector arr2(20);

// 包含长度和初始值
vector arr(10, 5);
vector arr2(10, 2.5);

在使用vector时,若没有指定初始值,不会是一个随机值,它会有一个默认值:0 ,这是和普通数组的区别之一 

三、常用成员函数
1.判空函数 empty()

判空函数用于判断当前容器是否为空,此函数返回一个布尔值,通过判断返回值是否为真从判断该容器是否为空

#include
#include
using namespace std;

int main()
{
	vector arr(5, 6);
	bool flg = arr.empty();
	if(flg) cout << "is empty" << endl;
	else cout << "not empty" << endl;
	
	return 0;
}
2.元素个数 size()

用于查看当前容器内实际元素的个数

#include
#include
using namespace std;

int main()
{
	vector arr(5, 6);
	int sizeNum = arr.size();
	cout << sizeNum << endl;
	
	return 0;
}
3.尾部添加 push_back()

向容器尾部添加一个元素,如果容器空间不足会自动扩大容器空间,括号内是添加的元素值

#include
#include
using namespace std;

int main()
{
    // 创建完成后,arr容器内有5个元素,其值均为 0
	vector arr(5, 0);

    // 此时查看元素个数,发现确实只有5个元素
	int sizeNum = arr.size();
	cout << sizeNum << endl;

    // 向末尾添加一个元素,元素值为:10	
    arr.push_back(10);

    // 再次查看实际元素个数,发现增加了一个
	cout << arr.size() << endl;
	
	return 0;
}
4.尾部删除 pop_back()
#include
#include
using namespace std;

int main()
{
    // 创建完成后,arr容器内有5个元素,其值均为 0
	vector arr(5, 0);

    // 此时查看元素个数,发现确实只有5个元素
	int sizeNum = arr.size();
	cout << sizeNum << endl;

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

    // 再次查看实际元素个数,发现元素个数减少了一个
	cout << arr.size() << endl;
	
	return 0;
}
5.元素删除 erase()

这里有两种删除,一是删除指定元素,二是删除指定区间的所有元素

删除指定位置元素:需要从第一个元素begin()位置开始计算,如删除第三个元素

#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i < 5; i++)
	{
		arr.push_back(i);
	}
	
	// 查看当前容器所有元素
	for(auto &num:arr)
		cout << num << " ";
	
	// 删除指定位置的元素
	arr.erase(arr.begin()+2);
	
	cout << endl;
	for(auto &num:arr) cout << num << " ";
	
	return 0;
}

 删除指定区间所有元素:如删除第2到第4个之间所有元素,注意区间是左闭右开区间

#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	// 查看当前容器所有元素
	for(auto &num:arr)
		cout << num << " ";
	
	// 删除指定位置的元素
	arr.erase(arr.begin()+1, arr.begin()+3);
	
	cout << endl;
	for(auto &num:arr) cout << num << " ";
	
	return 0;
}
6.向量清空 clear()

clear()函数删除当前数组中所有元素,实例如下

#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	cout << arr.size() << endl;
	
	arr.clear();
	
	cout << arr.size() << endl;
	
	return 0;
}
7.引用第一个元素 begin()

这里的引用是指对相应地址中的数据进行操作,包括对数据中的内容进行修改、排序等,想要获取到具体的值需要在前面加上解引用符号 * 星号,如访问第三个元素:则需要加2,begin指向的是向量数组中的第一个元素

#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	cout << *(arr.begin()+2) << endl;

	return 0;
}
8.引用最末尾位置 end()

原理同begin() ,但是这里的end()指向的是最后一个元素的下一个位置,所以要访问最后一个元素则需要在原来的基础上减 1

#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	cout << *(arr.end()-1) << endl;

	return 0;
}
9.获取第一个元素 front()
#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	cout << arr.front() << endl;

	return 0;
}
10.获取最后一个元素 back()
#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	
	cout << arr.back() << endl;

	return 0;
}
11.同快排函数使用
#include
#include
#include
using namespace std;

int main()
{
	vector arr;

	// 给容器赋值
	for(int i = 1; i <= 5; i++)
	{
		arr.push_back(i);
	}
	for(int i = 5; i >= 0; i--)
	{
		arr.push_back(i);
	}
	
	// 快排函数
	sort(arr.begin(), arr.end());
	
	// 迭代器输出排序后的结果
	for(auto &num:arr) cout << num << " ";

	return 0;
}

下一章:STL-栈stack介绍

你可能感兴趣的:(C++,STL全集,c++,开发语言)