int main() { vector<Animal*> vec; vec.push_back(new Animal("tiger", 1.2, 250, 5)); vec.push_back(new Animal("lion", 1.0, 200, 6)); vec.push_back(new Animal("elephant", 2.5, 5000, 25)); vec.push_back(new Animal("giraffe", 5.5, 800, 12)); sort(vec.begin(), vec.end(), compareWeight); for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { cout << (*iter)->getName() << ": " << (*iter)->getWeight() << endl; } cout << "The heaviest animal: " << vec.back()->getName() << endl; for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { delete *iter; } return 0; } 这段代码是什么意思?
时间: 2024-04-27 18:24:44 浏览: 11
这段代码是一个简单的 C++ 程序,它演示了如何使用 STL 中的 vector 和 sort 函数对一组 Animal 对象进行排序并输出结果。程序中定义了一个 Animal 类,每个 Animal 对象都有名称、体重、价格和年龄等属性。程序创建了一个 vector 容器,将几个 Animal 对象添加到容器中,然后使用 sort 函数根据体重对它们进行排序。最后,程序输出排序后的 Animal 对象列表和最重的动物的名称。最后,程序释放了动态分配的内存,以避免内存泄漏。
相关问题
int main() { vector<Animal*> vec; vec.push_back(new Animal("tiger", 1.2, 250, 5)); vec.push_back(new Animal("lion", 1.0, 200, 6)); vec.push_back(new Animal("elephant", 2.5, 5000, 25)); vec.push_back(new Animal("giraffe", 5.5, 800, 12)); sort(vec.begin(), vec.end(), compareWeight); for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { cout << (*iter)->getName() << ": " << (*iter)->getWeight() << endl; } cout << "The heaviest animal: " << vec.back()->getName() << endl; for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { delete *iter; } return 0; } 这段代码不用指针应该怎么写呢?
可以使用智能指针 `std::unique_ptr` 来替代原先的裸指针,避免手动管理内存。修改后的代码如下所示:
```
int main() {
vector<std::unique_ptr<Animal>> vec;
vec.push_back(std::make_unique<Animal>("tiger", 1.2, 250, 5));
vec.push_back(std::make_unique<Animal>("lion", 1.0, 200, 6));
vec.push_back(std::make_unique<Animal>("elephant", 2.5, 5000, 25));
vec.push_back(std::make_unique<Animal>("giraffe", 5.5, 800, 12));
sort(vec.begin(), vec.end(), compareWeight);
for (auto& animal : vec) {
cout << animal->getName() << ": " << animal->getWeight() << endl;
}
cout << "The heaviest animal: " << vec.back()->getName() << endl;
return 0;
}
```
值得注意的是,在使用 `std::unique_ptr` 时,我们需要使用 `std::make_unique` 来分配内存。此外,由于智能指针会自动管理内存,我们不再需要手动删除指针,因此删除指针的那个循环可以省略。
#include <iostream> #include <vector> #include <algorithm> using namespace std; class Animal { public: Animal(string _name, double _height, double _weight, int _age) : name(_name), height(_height), weight(_weight), age(_age) {} string name; double height; double weight; int age; }; bool cmp(const Animal &a, const Animal &b) { return a.weight < b.weight; } int main() { vector<Animal*> vec; vec.push_back(new Animal("Elephant", 2.5, 5000, 20)); vec.push_back(new Animal("Giraffe", 5.5, 800, 10)); vec.push_back(new Animal("Lion", 1.2, 250, 8)); vec.push_back(new Animal("Panda", 1.0, 150, 6)); sort(vec.begin(), vec.end(), cmp); double maxWeight = 0; Animal* maxWeightAnimal = nullptr; for (auto animal : vec) { cout << "Animal name: " << animal->name << ", weight: " << animal->weight << endl; if (animal->weight > maxWeight) { maxWeight = animal->weight; maxWeightAnimal = animal; } } if (maxWeightAnimal) { cout << "The heaviest animal is " << maxWeightAnimal->name << ", weight: " << maxWeightAnimal->weight << endl; } for (auto animal : vec) { delete animal; } return 0; }这段代码的输出结果是什么?
这段代码的输出结果为:
```
Animal name: Panda, weight: 150
Animal name: Lion, weight: 250
Animal name: Elephant, weight: 5000
Animal name: Giraffe, weight: 800
The heaviest animal is Elephant, weight: 5000
```
首先,代码创建了一个 Animal 类,并定义了一个比较函数 cmp,用于按照动物体重升序排序。然后,代码创建了一个 vector,向其中添加了四个动物实例。接着,代码使用 sort 函数按照动物体重进行排序,并输出每个动物的名称和体重。然后,代码找到最重的动物,并输出其名称和体重。最后,代码释放动物实例的内存。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)