c++ - 删除 vector 中间的用户定义元素

标签 c++ vector iterator erase user-defined

我正在编写一个程序,我想在其中抽一张牌,然后将其删除,这样它就不会再次被抽到。

我有一个名为 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/

相关文章:

c++ - 类内或类外的函数声明

c++ - 引用和对象切片

c++ - 如何在具有非常量指针键的映射中通过常量指针键查找

c++:从元素指针中减去迭代器以获得有效索引是否有效?

php - PHP IteratorIterator 类是如何工作的?

c++ - 创建静态 C++ 库时出现问题

c++ - 为什么 vector 构造函数在 unordered_map emplace 中使用时只采用参数的最后一个值?

r - 嵌套在 R 中的嵌套列表中的过程向量

dictionary - 除了 map 和矢量之外,get 在 Clojure 中还有其他用途吗?

rust - 使用 map_keys 对扩展迭代器