[vector 简介]
vector容器可以像数组那样进行随机的访问,还可以在尾部进行插入元素,是一种简单高效的容器,完全可以替换掉数组。
vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的整理所占用的内存空间。
vector容器的下标也是从0开始计数的。
vector容器的定义:
可以事先固定大小,事后可以随时间调整大小。
事先不定义,随时使用push.back()方法从尾部扩张元素
使用insert()在某个元素位置前插入新元素。
vector容器有两个重要的方法:
begin() 返回的是首元素位置的迭代器
end() 返回的是最后一个元素的下一个元素位置的迭代器
[创建vector对象]
# 1. 不指定容器的元素个数
vector<int> v;
# 2. 指定元素个数,下标是0-9,并且每个元素默认初始值为0
vector<double> v(10);
# 3.指定元素个数,并且为每个元素赋初始值
vector<double> v(10, 8.6);
# 4.二维vector的定义,下面我们定义了50个vector。
vector<int> v[50]
下标方式访问vector元素,用迭代器访问vector元素
常使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v(3);
//通过下标访问
v[0] = 2;
v[1] = 7;
v[2] = 9;
vector<int>::iterator it;//定义迭代器变量
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
[元素的插入]
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间 ,插入位置后的所有元素依次向后挪动一个位置,
insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v(3);
v[0] = 2;
v[1] = 7;
v[2] = 9;
//在最前面插入新元素,新元素值为8
v.insert(v.begin(), 8);
//在第2个元素前插入新元素1,vector从0开始计数
v.insert(v.begin()+2, 1);
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
[元素的删除]
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法则一次性删除vector中的所有元素
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v(3);
v[0] = 2;
v[1] = 7;
v[2] = 9;
//在最前面插入新元素,新元素值为8
v.insert(v.begin(), 8);
//在第2个元素前插入新元素1,vector从0开始计数
v.insert(v.begin()+2, 1);
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
[元素的删除]
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法则一次性删除vector中的所有元素
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v(10);
for(int i = 0; i < 10; i ++)
v[i] = i;
//删除第2个元素,从0开始计数
v.erase(v.begin()+2);
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
//删除迭代器第1个到第5个区间的所有元素
v.erase(v.begin()+1, v.begin()+5);
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
//清空向量
v.clear();
cout<<v.size()<<endl;
return 0;
}
[reverse()在vector中的使用]
reverse()反向排列算法,需要头文件#include
reverse()算法可将向量中某段迭代器区间元素反向排列
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v(10);
for(int i = 0; i < 10; i ++)
v[i] = i;
//反向排列向量从头到尾的元素
reverse(v.begin(), v.end());
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
//反向排列向量前5个元素
reverse(v.begin(), v.begin()+5);
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
[sort()在vector中的使用]
使用sort()算法,需要申明#include
sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
for(int i = 0; i < 10; i ++)
v.push_back(9-i);
//输出排序前
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
//排序 升序排序
sort(v.begin(), v.end());
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}
还可以自己设计排序比较函数,然后,吧这个函数指定给sort算法,sort就根据这个比较函数指定的排序规则进行排序,设计一个排序比较函数cmp
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//自行设计排序比较函数:对元素进行降序排列
bool cmp(const int &a, const int &b)
{
if(a != b)
return a > b;
else
return a > b;
}
int main()
{
vector<int> v;
for(int i = 0; i < 10; i ++)
v.push_back(i);
//输出排序前
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
//排序 升序排序
sort(v.begin(), v.end(), cmp);
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}
[vector的大小]
使用size()方法可以返回向量的大小,即向量元素的个数
[vector是否为空]
使用empty()方法返回向量是否为空