目录
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 9cout << "插入元素后的向量:";for (const auto& i : numbers){cout << i << ' ';}cout << endl;//删除向量中的某个元素numbers.erase(numbers.begin() + 4);//1 2 3 5 9cout << "删除元素后的向量:";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;
}
结果: