#include<vector>
#include<deque>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
//创建选手
class Person
{
public:
Person(string name, int score)
{
this->m_Name = name;
this->m_Score = score;
}
virtual ~Person()
{
}
public:
string m_Name;
int m_Score;
};
//创建五名选手
void createPerson(vector<Person*> &pvec)
{
string nameSeed = "ABCDE";
for (std::size_t i = 0; i < 5; i++)
{
string name = "选手";
name += nameSeed[i];
int score = 0;
Person *p = new Person(name, score); // 注意delete 释放对象指针指向的内存
pvec.push_back(p);
}
}
//打分
void setScore(vector<Person*> &pvec)
{
for (auto it = pvec.begin(); it != pvec.end(); it++)
{
//将评委打分 放到deque容器中
deque<int> deq;
for (std::size_t i = 0; i < 10; i++)
{
int score = rand() % 41 + 60;//60~100
deq.push_back(score);
}
//排序
sort(deq.begin(), deq.end());
//删除最高和最低分
deq.pop_back();
deq.pop_front();
//取平均分
int sum = 0;
for (auto dit = deq.begin(); dit != deq.end(); dit++)
{
sum += *dit;
}
int avg = sum / deq.size();
//平均分赋值给选手
(*it)->m_Score = avg;
}
}
//显示平均分
void showScore(vector<Person*> &pvec)
{
for (auto it = pvec.begin(); it != pvec.end(); it++)
{
cout << "姓名:" << (*it)->m_Name << "平均分:" << (*it)->m_Score << endl;
}
}
// clear
void Clear(vector<Person*> &pvec)
{
for(auto iter = pvec.begin();iter != pvec.end();iter++)
{
if(*iter != nullptr) //释放对象指针指向的内存
{
delete *iter;
*iter = nullptr;
}
}
// 巧妙
pvec.clear();
vector<Person*>(pvec).swap(pvec);
}
int main()
{
vector<Person*> pvec;
createPerson(pvec);
setScore(pvec);
showScore(pvec);
cout<<pvec.size()<<","<<pvec.capacity()<<endl;
Clear(pvec);
cout<<pvec.size()<<","<<pvec.capacity()<<endl;
return 0;
}
// g++ -g .\score.cpp -o exe/demo8
vector序列容器保存对象指针时的注意事项
最新推荐文章于 2024-09-10 16:23:03 发布