知识点:数组、vector 排序、 反转
使用场景:将数组(类型为RESULT)的数据按时间戳取最新的几项显示在表格中,滚动显示。
痛点:RESULT类较大,别人写的类,不改变数组。
步骤:
1.自定义类 ST(包含时间戳和数组索引2个成员变量);
2.遍历数组,将每个元素转存到vector 容器1;
3.按从大到小排序;
4.在容器1里取前面几项元素转存到vector 容器2;
5.将容器2反转;
6.遍历容器2,取索引去访问数组的元素,显示到表格里。
#include<stdio.h>
#include<utility>
#include <vector>
#include <string>
#include <chrono>
#include <algorithm>
#include <iostream>
using namespace std;
//原来的类,占用空间比较大
class RESULT
{
public:
RESULT(int64_t TimeStamp_=0, int result_=0):
TimeStamp(TimeStamp_),result(result_)
{
} ;
public:
int64_t TimeStamp;
int result;
};
//新建的类,占用空间小
class ST
{
public:
int64_t TimeStamp; //转存的时间戳
int index;//转存的数组的索引
};
//自定义排序函数
bool SortByM1( const ST &v1, const ST &v2)
{
return v1.TimeStamp > v2.TimeStamp;//降序排列
}
RESULT r [20] ;
void init_array()
{
for (int i = 0; i < 20; i++)
{
r[i]. TimeStamp=i+1;
r[i]. result=i %2;
}
}
void demo2();
int _tmain(int argc, _TCHAR* argv[])
{
init_array();
demo2();
getchar();
return 0;
}
void demo2()
{
vector<ST> v;
ST st1;
for (int i = 0; i < 20; i++)
{
st1.TimeStamp=r[i].TimeStamp;
st1.index=i;
v.push_back(st1);
}
cout<<"排序前:" <<endl;
for (auto &item:v) {
cout<<item.TimeStamp<<","<<item.index<<endl;
}
cout<<"排序后:" <<endl;
std::sort(v.begin(),v.end(),SortByM1);//排序
for (auto &item:v) {
cout<<item.TimeStamp<<","<<item.index<<endl;
}
cout<<"复制前3个到v2:" <<endl;
vector<ST> v2;
ST st2;
for (int i = 0; i < 3; i++)
{
st2.TimeStamp=v[i].TimeStamp;
st2.index=v[i].index;
v2.push_back(st2);
}
for (auto &item:v2)
{
cout<<item.TimeStamp<<","<<item.index<<endl;
}
cout<<"反转后:" <<endl;
reverse(v2.begin(), v2.end());
for (auto &item:v2)
{
cout<<item.TimeStamp<<","<<item.index<<endl;
}
cout<<"显示数组中最新的3个:" <<endl;
for (auto &item:v2)
{
cout<<r[item.index].TimeStamp<<","<<r[item.index].result<<endl;
}