STL之vector

发布时间:2024年01月12日

目录

vector的定义和特性

vector的定义和结构非常简单,它由以下几个重要的部分组成:

vector的常用函数

vector排序去重

排序

去重

代码示例


vector的定义和特性

在c++中,vector是一个动态数组容器,可以存储一系列相同类型的元素。它是标准库<vector>中定义的模板类。

vector的定义和结构非常简单,它由以下几个重要的部分组成:

模板类声明:vector是一个模板类,因此在使用之前需要包含头文件<vector>。声明一个vector对象的通用语法如下:??????? std::vector<T>vec;??????? 这里的T是要存储在vector中的数据类型。

容器大小:vector是一个动态数组,可以根据需要自动调整大小。它会根据元素的数量动态分配空间。

元素访问:可以通过索引来访问vector中的元素。索引从0开始,最后一个元素的索引时size()-1.可以使用[]运算符或at()函数来访问元素。

元素的添加和删除:可以使用push_back()函数在vector的末尾添加元素,使用pop_back函数删除末尾的元素。还可以使用insert()函数在指定位置插入元素,使用erase()函数删除指定位置的元素。

容器的大小管理:可以使用size()函数获取vector中元素的数量,使用empty()函数检查vector是否为空。还可以使用resize()函数调整vector的大小。

迭代器:vector提供了迭代器,可以用于遍历容器中的元素。可以使用begin()函数获取指向第一个元素的迭代器。使用end()函数获取指向最后一个元素之后位置的迭代器。

vector的常用函数

push_back():将元素添加到vector末尾

pop_back():删除vector末尾的元素??????? PS:一定要保证vector非空

begin()和end():返回指向第一个元素和最后一个元素之后位置的迭代器

vector排序去重

排序

要对vector排序,可以使用标准库中的std::sort函数,该函数位于<algorithm>

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	vector<int>vec = { 5,2,8,9,1 };
	sort(vec.begin(), vec.end());

	for (const auto& i : vec)
	{
		cout << i << " ";
	}
	return 0;
}

运行结果:1 2 5 8 9

去重

要去除vector中重复元素,可使用unique函数。该函数位于<algorithm>

首先,排序,以便相同的元素相邻。然后,unique函数将重复的元素移动到vector的末尾,并返回一个指向重复元素的迭代器。最后,可以使用vec.erase函数将重复元素从vector中删除。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	vector<int>vec = { 2,1,3,2,4,1,5,4 };
	sort(vec.begin(), vec.end());
	auto last = unique(vec.begin(), vec.end());	
	vec.erase(last, vec.end());
	for (const auto& i : vec)
	{
		cout << i << " ";
	}
	return 0;
}

运行结果:1 2 3 4 5

代码示例

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	vector<int>numbers;
	//向向量中添加元素	
	numbers.push_back(5);
	numbers.push_back(2);
	numbers.push_back(8);
	numbers.push_back(5);
	numbers.push_back(1);
	numbers.push_back(2);
	numbers.push_back(9);
	numbers.push_back(8);
	//打印向量中的元素
	cout << "原始向量中的元素:";
	for (const auto& i : numbers)
	{
		cout << i << ' ';//5 2 8 5 1 2 9 8
	}
	cout << endl;
	//对向量进行排序
	sort(numbers.begin(), numbers.end());
	//打印排序后的向量
	cout << "排序后的向量为:";
	for (const auto& i : numbers)
	{
		cout << i << ' ';//1 2 2 5 5 8 8 9
	}
	cout << endl;
	//去除重复元素
	numbers.erase(unique(numbers.begin(), numbers.end()), numbers.end());
	//打印去重后的向量
	cout << "去重后的向量:";
	for (const auto& i : numbers)
	{
		cout << i << ' ';//1 2 5 8 9
	}
	cout << endl;
	//向向量中插入元素
	numbers.insert(numbers.begin() + 2, 3);//1 2 3 5 8 9
	cout << "插入元素后的向量:";
	for (const auto& i : numbers)
	{
		cout << i << ' ';
	}
	cout << endl;
	//删除向量中的某个元素
	numbers.erase(numbers.begin() + 4);//1 2 3 5 9
	cout << "删除元素后的向量:";
	for (const auto& i : numbers)
	{
		cout << i << ' ';
	}
	cout << endl;
	//检查向量是否为空
	if (numbers.empty())
	{
		cout << "向量为空" << endl;
	}
	else
	{
		cout << "向量不为空" << endl;
	}
	//获取向量的大小
	cout << "向量的大小:" << numbers.size() << endl;
	//清空向量
	numbers.clear();
	//检查向量是否为空
	if (numbers.empty())
	{
		cout << "向量为空" << endl;
	}
	else
	{
		cout << "向量不为空" << endl;
	}

	return 0;
}

结果:

文章来源:https://blog.csdn.net/weixin_63201442/article/details/135496211
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。