标准模板库--STL,它包含了多种预定义的容器、算法和迭代器,极大地简化了编程工作。简单的说就是有了一些可以直接用的函数。
vector
vector是C++标准模板库(STL)中提供的一种模板类,它代表了一个可以动态调整大小的数组,
在编程中,我们通常称之为“变长数组”,意味着其长度可以根据需要自动增长或缩小。
变长数组,在C语言中定义数组的时候int arr[100],中括号里面的必须是一个常量,当我们不知道数组的大小的时候,用C语言就不是很方便。
在使用vector加一个头文件就可以———#include<vector>
vector定义
vector的定义语法
vector<typename> name;这个只是定义了一个数组,长度未知,数组中的数字默认为0
vector<typename> name(n);这个数组长度为n,数组中数字为0
vector<typename> name(n,num);这个数组长度为n,数组中每个数字为num
vcctor的使用示例:
定义一个整数类型的vector——vector<int>name;
定义一个双精度浮点数类型的vector——vcctor<double>name;
定义一个字符类型的vector——vector<char>name;
定义一个结构体类型的vector——vector<node>name;(其中node是已定义的结构体类型)
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr(n); for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; return 0; }
vector访问
vector访问可以像C语言那样用下标访问——arr[i];
常用函数
push_back(element)——向vector的末尾添加一个新元素。
pop_back()——删除vector中的最后一个元素。
size()——返回vector中元素的个数
clear()——删除vector中的所有元素,使其变为空。
insert(it, element)——在指定的迭代器位置插入一个新元素。
erase(it)——删除指定迭代器位置的元素。
size()
输出数组的元素个数
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); cout<<"元素个数:"<<arr.size()<<endl; return 0; }
push_back(num)
直接在末尾加如num这个数字
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); cout<<"元素个数:"<<arr.size()<<endl; cout<<"输出元素:"; for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; return 0; }
pop_back()
作用是删除最后的元素
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); cout<<"元素个数:"<<arr.size()<<endl; cout<<"输出元素:"; for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; arr.pop_back(); cout<<endl<<"pop_back()一次之后"<<endl; cout<<"元素个数:"<<arr.size()<<endl; cout<<"输出元素:"; for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; return 0; }
clear
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); cout<<"元素个数:"<<arr.size()<<endl; cout<<"输出元素:"; for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; arr.clear(); cout<<endl<<"clear()"<<endl; cout<<"元素个数:"<<arr.size()<<endl; cout<<"输出元素:"; for(int i=0;i<arr.size();i++)cout<<arr[i]<<' '; return 0; }
在介绍后两个函数之前先来了解一下迭代器
迭代器(iterator)
迭代器,我之前的理解就是循环,其实不是的,专业点来说迭代器是一个变量,指向容器(例如数组-vector,字符串-string)的元素的一个变量,“指向”是不是有些耳熟,从这看,迭代器和指针类似
这里我们就介绍一下正向迭代器
迭代器定义
容器类名::iterator 迭代器名;
例如:vector<int>::iterator p
此时p就相当于就相当于指针,我们可以给p进行指向;
遍历数组示例
begin()是获得数组开始的元素
end()是获得数组结尾的那个元素
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); //定义迭代器 vector<int>::iterator p=arr.begin(); for(int i=0;i<arr.size();i++) { cout<<*(p+i)<<' '; } return 0; }
insert(it, element)
insert(it, element)——在指定的迭代器位置插入一个新元素 (其中it是迭代器的所指的位置,element是要插入的元素)
假设:我们想在数组的第4个未知插入10;
begin()是获得第一个元素,后面加上数字几,就往后移动几个元素
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); //定义迭代器 vector<int>::iterator p=arr.begin(); cout<<"插入前"<<endl; cout<<"数组元素个数:"<<arr.size()<<endl; cout<<"数组元素:"; for(int i=0;i<arr.size();i++) cout<<*(p+i)<<' '; //定义一个迭代器 vector<int>::iterator p3=arr.begin()+3; arr.insert(p3,10); cout<<endl<<"插入后"<<endl; cout<<"数组元素个数:"<<arr.size()<<endl; cout<<"数组元素:"; for(int i=0;i<arr.size();i++) cout<<*(p+i)<<' '; return 0; }
erase(it)
erase(it)——删除指定迭代器位置的元素。
假设要删除第5个位置的元素
#include<iostream> #include<vector> using namespace std; int main() { int n; cin>>n; vector <int>arr; for(int i=0;i<n;i++)arr.push_back(i); //定义迭代器 vector<int>::iterator p=arr.begin(); cout<<"删除前"<<endl; cout<<"数组元素个数:"<<arr.size()<<endl; cout<<"数组元素:"; for(int i=0;i<arr.size();i++) cout<<*(p+i)<<' '; //定义一个迭代器 vector<int>::iterator p3=arr.begin()+4; arr.erase(p3); cout<<endl<<"删除后"<<endl; cout<<"数组元素个数:"<<arr.size()<<endl; cout<<"数组元素:"; for(int i=0;i<arr.size();i++) cout<<*(p+i)<<' '; return 0; }