vector<weapon*> weapons;得到的数组有初始元素吗
时间: 2024-02-22 08:54:58 浏览: 64
在 C++ 中,使用 `vector<weapon*> weapons` 声明一个名为 `weapons` 的指针数组时,不会自动包含初始元素。需要注意的是,如果没有使用 `vector` 的构造函数或 `push_back()` 方法添加元素,那么该 `vector` 将是空的,即没有任何元素。
例如,以下代码创建了一个空的 `vector`:
```c++
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec; // 创建一个空的 vector
std::cout << vec.size() << std::endl; // 输出 0,即 vector 中没有任何元素
return 0;
}
```
如果要在创建 `vector` 时包含初始元素,可以使用以下代码:
```c++
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec {1, 2, 3}; // 创建一个包含初始元素的 vector
std::cout << vec.size() << std::endl; // 输出 3,即 vector 中包含 3 个元素
return 0;
}
```
其中,花括号中的元素会被添加到 `vector` 的末尾。
相关问题
对weapon*类型的vector数组里面的元素按照id排序
对于`weapon*`类型的vector数组,可以通过定义一个比较函数来实现按照id排序。具体的实现代码如下:
```c++
#include <algorithm>
#include <vector>
// 定义weapon结构体
struct weapon {
int id;
// 其他成员变量
};
// 定义比较函数,按照id从小到大排序
bool cmp(const weapon* w1, const weapon* w2) {
return w1->id < w2->id;
}
int main() {
// 假设weapons为包含weapon*类型元素的vector数组
std::vector<weapon*> weapons;
// 排序
std::sort(weapons.begin(), weapons.end(), cmp);
return 0;
}
```
需要注意的是,由于vector数组中的元素是指向`weapon`结构体的指针,所以在比较函数中需要通过`->`符号来访问`weapon`结构体中的`id`成员变量。
有一个基类wariror,里面有weapon*类型的vector数组,在主函数中每次会产生warrior*类型派生类lion类型的对象,每次产生对象时都会往weapon数组添加元素,如何对里面的元素排序
可以在基类 `warrior` 中添加一个排序函数,然后在每次往 `weapon` 数组添加元素时调用该函数进行排序。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class weapon {
public:
int damage;
weapon(int d): damage(d) {}
};
class warrior {
public:
vector<weapon*> weapons;
virtual void addWeapon(weapon* w) {
weapons.push_back(w);
sortWeapons();
}
virtual void sortWeapons() {
sort(weapons.begin(), weapons.end(), [](weapon* a, weapon* b) {
return a->damage > b->damage;
});
}
};
class lion : public warrior {
public:
virtual void addWeapon(weapon* w) override {
warrior::addWeapon(w);
cout << "Lion's weapon list:" << endl;
for (auto weapon : weapons) {
cout << weapon->damage << " ";
}
cout << endl;
}
};
int main() {
warrior* w = new lion();
w->addWeapon(new weapon(10));
w->addWeapon(new weapon(5));
w->addWeapon(new weapon(8));
delete w;
return 0;
}
```
这里我们在 `warrior` 类中添加了 `sortWeapons` 函数,使用 `sort` 函数对 `weapons` 数组进行排序。同时,在 `lion` 类中覆盖了 `addWeapon` 函数,在添加完武器后输出当前武器列表。
在主函数中,我们创建了一个 `lion` 类型的对象,并向其添加了三个不同伤害的武器。在程序运行时,会输出以下内容:
```
Lion's weapon list:
10
Lion's weapon list:
10 5
Lion's weapon list:
10 8 5
```
可以看到,每次添加武器后,程序都会对武器列表进行排序。
阅读全文