Oni*_*ros 5 c++ iterator vector erase user-defined
我正在编写一个我要绘制卡片的程序,然后删除它以便不再绘制它.
我有一个卡片向量(包含2个定义套装和值的结构的类)称为卡片,我真的不知道如何使用迭代器,这里是一个代码片段:
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);
}
Run Code Online (Sandbox Code Playgroud)
cardSelect有我要删除的卡的位置.它是在0的边界和甲板的大小内随机生成的; 因此它不应指向超出界限的位置.
每次我编译我都会收到以下错误:
"Expression: vector erase iterator outside range"
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做,希望有人可以帮助我,提前谢谢!
我的赌注是getDeck按值返回向量。它导致itr指向erase向量的不同副本并对其进行操作。因此你会得到错误。您应该通过引用返回向量。将签名更改getDeck为此:
vector<Card>& getDeck()
Run Code Online (Sandbox Code Playgroud)