身为一个不算程序员的程序员,目前来说,最令我们头疼的应该就是那繁多的数据结构和算法问题,例如排序,数据存储等等。而STL为我们提供了一个方便的平台,它提供了大约100个实现算法的模板函数。我们熟悉了STL之后,许多代码都可以被简化,而且能提升运算的效率。我想在我们入职真正的程序员之后,STL将为我们提供很大的便利。
而在之前我知道有STL中list,string,vector这几个简单的用法,昨天通过友人雷锋,知道了身处在<algorithm>这个头文件中的sort函数,顿时觉得我的懒惰终于有处使了,嘿嘿嘿。
言归正传,sort函数的定义如下:
#inlcude <algorithm>
using namespace std;
default (1):
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2):
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
sort函数默认是升序排列,函数的用法是sort(a,a+n); 两个参数分别为需要排序数组的首地址和尾地址。
进一步的方法是可以自己写cmp函数,可以进行一些更复杂的结构体的排序。
例如
int cmp(const Data &a,const Data &b)
{
if(a.data < b.data)//升序
return 1;
else
return 0;
}
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[] = {12,3,35,8,-19,1999,100,9,0,23};
struct Data
{
int data;
int num;
}data[10];
//打印数组
void print1()
{
for(int i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
//数组排序
void sort1()
{
sort(a,a+10);
}
//结构体数组赋值
void insert()
{
for(int i = 0; i < 10; i++)
{
data[i].data = a[i];
}
}
//打印结构体数组
void print2()
{
for(int i = 0; i < 10; i++)
{
printf("%d ",data[i].data);
}
printf("\n");
}
//结构体数组排序函数
int cmp(const Data &a,const Data &b)
{
if(a.data > b.data)//降序排列
return 1;
else
return 0;
}
//结构体数组排序
void sort2()
{
sort(data,data+10,cmp);
//sort(data,data+10);
}
void main()
{
//结构体数组赋值
insert();
//数组排序
printf("数组排序前:\n");
print1();
sort1();
printf("数组排序后:\n");
print1();
//结构体数组排序
printf("结构体数组排序前:\n");
print2();
sort2();
printf("结构体数组排序后:\n");
print2();
}