vector<weapon*> weapons;数组无法插入元素可能是什么原因导致的
时间: 2024-02-21 15:02:22 浏览: 73
vector<weapon*> weapons;定义的变量是一个空的vector容器,无法直接使用下标访问或插入元素。如果需要向vector中插入元素,可以使用push_back()函数将元素添加到vector的末尾,如下所示:
```
weapons.push_back(new sword());
```
上述代码将一个sword类型的对象的指针添加到weapons容器的末尾。另外,需要注意的是,vector中保存的是指针,需要手动管理指针的内存,避免内存泄漏。可以使用C++11引入的unique_ptr或shared_ptr等智能指针来避免手动管理内存的繁琐。
相关问题
对weapon*类型的vector数组里面的元素按照id排序
可以使用STL的sort函数来对vector数组中的元素进行排序。假设vector数组的类型为weapon,id为其成员变量,则可以按照以下方式排序:
```c++
#include <algorithm> // 必须要包含此头文件才能使用sort函数
// 定义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::sort(weapons.begin(), weapons.end(), cmp); // 排序
return 0;
}
```
这样就能对vector数组中的元素按照id从小到大排序。
#pragma once #include "Weapon.h" #include <memory> #include <vector> class HeadQuarter; class Dragon; class Ninja; class Iceman; class Lion; class Wolf; class City; enum { dragon, ninja, iceman, lion, wolf }; enum { WarriorNum = 5 }; enum { MaxWeaponNum = 10 }; class Warrior { private: virtual void doLogBirth() = 0; public: int id, lifeValue; HeadQuarter* pHeadquarter; int kind; int theAttackValue; string name; vector<shared_ptr<Weapon>> weapons; Warrior(int _kind, HeadQuarter* phq, int _id, int lv, int av); int cityID; int nowWeaponID = 0; static const string Name[WarriorNum]; static shared_ptr<Warrior> create(int _kind, HeadQuarter* phq, int _id, int lv, int av, int _k); virtual void moveForward(int time, int& isOver); void logBirth(int time); int getLifeValue()const { return lifeValue; } int getWeaponNum()const { return weapons.size(); } string getName()const { return name; } int getID()const { return id; } int getKind()const { return kind; } int getCityID()const { return cityID; } int getMaxHurt(); void WolfSteal(int time, Warrior* pEnemy); //保证偷之前weapon有序,且偷之后保持有序 virtual int LionEscape(int time) { return 0; } void oneAttack(Warrior* enemy); void sortWeapons(); void reportSituation(int time); void captureWeapon(Warrior* pEnemy); virtual ~Warrior() {} };
这是一个C++的头文件,其中定义了一个名为Warrior的类,包含了一些私有成员变量和公有成员函数。其中私有成员变量包括一个虚函数doLogBirth()、一个ID、生命值、所属阵营指针、种类、攻击值、名称、拥有的武器列表。公有成员函数包括构造函数、移动函数、记录出生函数、获取生命值、获取武器数量、获取名称、获取ID、获取种类、获取所在城市ID、获取最大攻击值、狼人偷武器函数、狮子逃跑函数、攻击函数、武器排序函数、报告状态函数、夺取武器函数和析构函数。
阅读全文