回顾C++
1. const_iterator
const迭代器
有时候为了避免在遍历输出时将容器内部数据改变,我们把形参传入const类型。但是这样会导致使用迭代器时报错,改正方法是把迭代器初始化为const_iterator类型:
void print_deque(const deque<int> deq)
{
for(deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++ )
{
*it = 100; //报错
cout<<*it<<" ";
}
cout<<endl;
}
2. STL案例
/*案例*/
#include <iostream>
#include <deque>
#include <vector>
#include <string>
#include <algorithm>
#include <time.h>
#include <cstdlib>
using namespace std;
template <typename T1, typename T2>
class Person
{
public:
Person(T1 name, T2 score)
{
this->name = name;
this->score = score;
}
void show_info()
{
cout<<"name is: "<<this->name <<" score is: "<<this->score<<endl;
}
T1 name;
T2 score;
};
template <typename T>
void generate_people(vector<T> &vec)
{
string id = "ABCDE";
//cout<<id.size()<<endl;
string title = "选手";
for(int i = 0; i<id.size(); i++)
{
string name = title+id[i];
vec.push_back(Person<string, int>(name,0));
}
// for(int i = 0; i<id.size(); i++)
// {
// cout<< vec[i].name <<endl;
// }
}
template <typename T>
void generate_score(vector<T> &vec)
{
srand((unsigned)time(NULL));
for(int i = 0; i<vec.size(); i++)
{
deque<int> deq;
for(int j = 0; j<10; j++)
{
deq.push_back(rand() % 41 + 60);
}
sort(deq.begin(), deq.end());
deq.pop_back();
deq.pop_front();
int sum = 0;
for(int j = 0; j<deq.size(); j++)
{
sum += deq[j];
}
vec[i].score = sum/deq.size();
}
}
int main(int argc, char const *argv[])
{
vector<Person<string, int>> vec;
generate_people(vec);
generate_score(vec);
for(int i = 0; i<vec.size(); i++)
{
vec[i].show_info();
}
return 0;
}