vector向量容器
作为数组的一个泛化推广的vector容器,不仅可以数组一样的元素随机访问,还可以在容器的尾端插入新元素
vector是一个简单,高效的容器,在尾端插入和删除元素,算法时间复杂度为O(1)常数阶,其他元素的插入和删除为O(n)的线性阶,其中n为容器的元素个数,vector具有自动的内存管理功能,对于元素的插入和删除,可动态的调整所占用的内存空间。
vector技术原理
vector容器是一个线性结构,用3个指针存放向量的起始字节位置,当前最后一个向量元素的末尾字节和整个容器所占用的内存空间的末尾字节,3个指针变量分别为m_start,m_finish和m_end_of_storage
vector应用基础
创建vector对象
1 vector<int> v;
2 vector<double> v(10); //创建一个具有10个元素的vector对象,每个元素默认值为0.0
3 vector<double> v(10,9.3); //创建一个具有10个元素的vector对象,每个元素默认值为9.3
4 vector<char> v1(5,'k');
vector<char> v2(v1);
初始化赋值
vector提供push_back函数,常用来进行vector容器的初始化,push_back函数在容器的尾端插入新元素
元素的遍历访问
vector的元素可采用数组或者迭代器的访问进行遍历访问
#include<vector>
#include<iostream>
int main()
{
using namespace std;
vector<int> v;
v.push_back(20);
v.push_back(26);
v.push_back(39);
for(int i=0;i<v.size();i++)
{
cout<<"v[" <<i <<"]=" <<v[i] <<endl;
}
return 0;
}
#include<vector>
#include<iostream>
int main()
{
using namespace std;
vector<int> v;
v.push_back(20);
v.push_back(26);
v.push_back(39);
vector<int>::iterator i,iend;
iend = v.end();
int j;
for(i = v.begin(),j = 0;i != iend;i++,j++)
{
cout<<"v[" <<j <<"]=" <<*i <<endl;
}
return 0;
}
vector提供了begin()和end()函数用于获取首元素的迭代器和最后一个元素的下一位置的迭代器
元素的插入
不同于在vector容器尾部添加元素的push_back函数,insert函数可在函数的任意位置插入元素,由于插入时先将插入位置后的元素移位,以空出一个位置进行插入,因此,insert函数的执行较push_back函数稍为耗时
#include<vector>
#include<iostream>
int main
{
using namespace std;
vector<int> v;
v.push_back(6);
v.push_back(7);
v.push_back(8);
v.push_back(10);
v.insert(v.begin()+3,9); //在元素10的前面插入9
v.insert(v.begin(),5); //插入5为首元素
v.insert(v.end(),11); //插入11为末元素
for(int i = 0;i < v.size();i++)
{
cout<<"v[" << i <<"]=" <<v[i] <<endl;
}
return 0;
}
元素的删除
......待续