vector与结构体结合的简单应用

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 结构体
个人分类: STL
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭