删除向量中间的用户定义元素

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)

我真的不知道该怎么做,希望有人可以帮助我,提前谢谢!

ybu*_*ill 2

我的赌注是getDeck按值返回向量。它导致itr指向erase向量的不同副本并对其进行操作。因此你会得到错误。您应该通过引用返回向量。将签名更改getDeck为此:

vector<Card>& getDeck()
Run Code Online (Sandbox Code Playgroud)