【问题标题】:C++ remove by index a value within a vector of pointers [closed]C ++通过索引删除指针向量中的值[关闭]
【发布时间】:2021-01-24 03:39:48
【问题描述】:

我试图让我的代码结构只添加和删除SDL_Textures*,这样我就不必手动添加偏移量或绘制它,而是由我的类Screen_Object 处理。我的声明是std::vector < SDL_Texture* > m_Textures;。我有其他方法可以让我更改 std::vector 但它不会编译:

void Screen_Object::Remove_Texture(SDL_Texture* p_Texture)
{
    for (unsigned int i=0; i < m_Textures.size(); i++)
    {
        if (m_Textures[i] == p_Texture)
        {
            m_Textures.erase(i,    1 );
            m_Texture_Rects.erase(i,    1 );
        }
    }
}

顺便说一句,这里是定义:

std::vector < SDL_Texture* > m_Textures;
std::vector < SDL_Rect* > m_Texture_Rects;

错误信息:

error: no matching function for call to 'std::vector<SDL_Texture*>::erase(unsigned int&, int)'

【问题讨论】:

  • 请每个 stackoverflow.com 问题一个问题。你问的是两个完全不同的问题,彼此毫无关系。
  • 好吧,最后一部分对const 很有意义。我不太确定我是否理解关于擦除的第一部分,例如“将向量的索引转换为等效的迭代器”

标签: c++ pointers vector


【解决方案1】:

变化:

m_Textures.erase(i,    1 );
m_Texture_Rects.erase(i,    1 );

到:

m_Textures.erase(m_Textures.begin() + i);
m_Texture_Rects.erase(m_Texture_Rects.begin() + i);

erase 需要一个迭代器,而不是一个整数。

【讨论】:

  • 太棒了!那行得通。仅供参考,我怎样才能以这种方式擦除多个元素?
  • m_Textures.erase(m_Textures.begin() + i, m_Textures.begin() + i + number_of_elements);
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2013-07-02
  • 2014-09-11
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多