vector是STL中很重要的一个容器。简单地说,vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大和减小。它提供了对元素的随机访问。在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的时间复杂度为线性的。
在使用时需要添加头文件<vector>,为方便使用通常有 using namespace std;语句。
vector的功能很多,其相关的成员函数基本可以实现所有常用功能,再次不一一举例。除此之外,值得注意的有两点:(1)同一般的STL容器,vector也可使用迭代器来访问(遍历)其中的元素,并且很方便;(2)vector是可反转容器,可使用rbegin()和rend()来逆向遍历容器。
ps:vector 模板类是最简单的序列类型,除非其他类型的特点优点能够更好地满足程序的要求,否则应默认使用这种类型。
以下程序功能为使用vector容器存放结构体类型,并查找其中一些属性的最小值。
#include <iostream>
#include <vector>
using namespace std;
struct Elem
{
long img_ind;
double value;
double dvalue;
Elem()
{
img_ind = 0;
value = 0;
dvalue = 0;
}
Elem(long _ind, double _value, double _dvalue )
{
img_ind = _ind;
value = _value;
dvalue = _dvalue
}
};
int main()
{
vector<Elem*> trial;
int i,a;
long ind[10];
double phi[10],dphi[10];<span style="white-space:pre"> </span>//赋初值 for(i=0; i < 10; i++)
{
ind[i] = i;
phi[i] = 50+i;
dphi[i] = 20-i;
Elem * elem = new Elem(ind[i], phi[i], dphi[i]);
trial.push_back(elem);
//printf("ind = %ld, value = %f, dvalue = %f \n", trial[i]->img_ind, trial[i]->value, trial[i]->dvalue);
}
double min_phi,min_dphi;
vector<Elem*>::iterator iter = trial.begin();
for ( ; iter != trial.end(); iter++)
cout << "ind = " << (*iter)->img_ind << " phi = " << (*iter)->value << " dphi = " << (*iter)->dvalue << endl ;
<span style="white-space:pre"> </span>//寻找最值
min_phi = trial[0]->value;
min_dphi = trial[0]->dvalue;
for(i=1; i<trial.size();i++)
{
if(min_phi > trial[i]->value) min_phi = trial[i]->value;
if(min_dphi > trial[i]->dvalue) min_dphi = trial[i]->dvalue;
}
//min_phi = *min_element(iter.begin(),iter.end()) 结构体中使用min_element似乎不可行;
cout << "min_phi = " << min_phi << endl << "min_dph = " << min_dphi;
return 0;
}
其中值得注意的是vector<Elem*> xx为指针,迭代器也为指针,因此要注意*的使用。
本文介绍了STL中的vector容器,它提供自动内存管理和动态大小调整。通过实例展示了如何使用vector存储结构体类型,并利用其特性查找结构体属性的最小值。程序演示了使用迭代器访问元素及逆向遍历vector的方法。

765

被折叠的 条评论
为什么被折叠?



