测试记录一下以备忘。
实现的功能是从一个结构体类型的vector里,取其中某一个字段来生成一个新的vector,并去掉重复。
用库函数实现,代码量比较少。
VS2015 -- win32控制台:
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
struct stu
{
char name[20];
int age;
int weight;
};
struct get_name
{
explicit get_name() {}
char* operator()(stu& stu_arg) const
{
return stu_arg.name;
}
};
int main()
{
vector<string> name_list;
vector<stu> stu_list;
stu s1 = { "大张", 20, 100 } ;
stu s2 = { "sevn", 21, 110 };
stu s3 = { "tom", 24, 120 };
stu s4 = { "小何", 27, 121 };
stu s5 = { "merry", 25, 105 };
stu s6 = { "merry", 29, 115 };
stu s7 = { "小何", 21, 123 };
stu_list.push_back(s1);
stu_list.push_back(s2);
stu_list.push_back(s3);
stu_list.push_back(s4);
stu_list.push_back(s5);
stu_list.push_back(s6);
stu_list.push_back(s7);
vector<string>::iterator it;
transform(stu_list.begin(), stu_list.end(), back_inserter(name_list), get_name());
for (it = name_list.begin() ; it != name_list.end(); it++)
{
cout << "name = " << (*it).c_str() << endl;
}
cout << "排序后:" << endl;
sort(name_list.begin(), name_list.end());
vector<string>::iterator it_earse = unique(name_list.begin(), name_list.end());
name_list.erase(it_earse, name_list.end());
for (it = name_list.begin(); it != name_list.end(); it++)
{
cout << "name = " << (*it).c_str() << endl;
}
cout << "size:" << name_list.size() << endl;
cout << "capacity:" << name_list.capacity() << endl;
return 0;
}