C++标准模板库(STL)中容器vector的使用

  • 因为最近在做一个C++简单角色类游戏的设计,在角色类的武器槽里用到了vector容器以及迭代。
class Role
{
public:
	Role();
	~Role();
	Role(string name, int phy, int mag,int defend);//构造
	bool islive();//判断是否存活
	void attack(Role & player);//攻击其他角色
	void reset(string name, int phy, int mag,int defend);//角色参数重置
	void showrole();//显示角色状态
	void equip(equipment weapon);//给角色装备武器
	void takeoff(equipment weapon);//卸下武器
	void practice();//角色修炼
	void upweapon();//武器升级
//protected:
	string name;
	int level;
	int blood;
	int phy;
	int mag;
	int blue;
	int harm;
	int defend;
	vector<equipment>weapon;//武器槽
	int flag;//武器标志位
	int defendflag;
	
};
  • vector容器声明
    vector<equipment“>weapon;//武器槽
    equipment是我自己定义的一个类,“这个符号删掉。

  • 添加与删除指定元素
    (1)添加(向武器槽内装备武器)

void Role::equip(equipment weapon){//装备武器
	if (this->weapon.size() >= 3){
		cout << "武器槽已满,无法装备武器!" << endl;
	}
	else{
		this->weapon.push_back(weapon);
		flag += 1;//武器标志位
		cout << name << "装备了" << weapon.name << "!" << endl << endl;
	}
}

(2)有条件的删除元素(卸下指定武器)

注意:顺序式容器会使本身和后面的元素迭代器都失效,所以不能简单的++操作,这里顺序式容器的erase()会返回紧随被删除元素的下一个元素的有效迭代器

void Role::takeoff(equipment weapon){//卸下武器
	vector<equipment>::iterator i;
	for (i = this->weapon.begin(); i != this->weapon.end();){
		if ((*i).name == weapon.name){
			i = this->weapon.erase(i);
			flag -= 1;
			cout << name << "卸下了" << weapon.name << "!" << endl << endl;
		}
		else{
			++i;
		}
	}
}

若是节点式容器的条件删除:

vector<equipment>::iterator i;
for (i = this->weapon.begin(); i != this->weapon.end();){
    if (...)
    {
        //因为节点式只会导致当前节点迭代器失效,所以删除节点的同时对迭代器进行后移的操作,因为其他元素不会失效
        i.erase(i++);
    }
    else
    {
        ++i;
    }
}

此处参考博客:https://www.cnblogs.com/Yogurshine/p/4030728.html

  • 遍历
		vector<equipment>::iterator i;
		for (i = weapon.begin(); i != weapon.end(); i++){
			cout << "所持装备:" << (*i).name << endl;
			cout << "装备等级:" << (*i).e_level << endl;
			cout << "攻击加成:" << (*i).e_phyadd << endl;
			cout << "魔法加成:" << (*i).e_magadd << endl;
			cout << "防御加成:" << (*i).defend << endl;
			cout << "武器耐久度:" << (*i).durability << endl;
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值