我正在编写一个程序,我想在其中抽一张牌,然后将其删除,这样它就不会再次被抽到。
我有一个名为 deck 的 Cards vector (包含 2 个定义 Suit 和 Value 的结构的类),我真的不知道如何很好地使用迭代器,这里是一个代码片段:
void Player::discardCard(CardDeck masterDeck)
{
cout << "Erasing: " << masterDeck.getDeck().at(cardSelect).toString() << endl;
/*Attempt1*/
masterDeck.getDeck().erase(masterDeck.getDeck().begin()+cardSelect);
/*Attempt 2*/
vector<Card>::iterator itr;
itr = masterDeck.getDeck().begin() + cardSelect;
masterDeck.getDeck().erase(itr);
}
cardSelect 有我要删除的卡片的位置。 在0和牌组大小范围内随机生成;因此它不应该指向边界之外的位置。
每次编译都会出现以下错误:
"Expression: vector erase iterator outside range"
我真的不知道该怎么办,希望有人能帮助我,在此先感谢!
最佳答案
我敢打赌,getDeck
会按值返回 vector 。它使 itr
指向并使 erase
对 vector 的不同拷贝进行操作。因此你得到了错误。您应该通过引用返回 vector 。将 getDeck
签名更改为这个:
vector<Card>& getDeck()
关于c++ - 删除 vector 中间的用户定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509395/