C ++通过索引删除指针向量中的值[关闭]

Posted

技术标签:

【中文标题】C ++通过索引删除指针向量中的值[关闭]【英文标题】:C++ remove by index a value within a vector of pointers [closed] 【发布时间】: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)'

【问题讨论】:

请每个 ***.com 问题一个问题。你问的是两个完全不同的问题,彼此毫无关系。 好吧,最后一部分对const 很有意义。我不太确定我是否理解关于擦除的第一部分,例如“将向量的索引转换为等效的迭代器” 【参考方案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);

以上是关于C ++通过索引删除指针向量中的值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 R 中的字符向量中删除引号

如何通过C ++中的数据获得向量的索引

c中的无符号整数和整数指针[关闭]

将指针向量传递给c ++中的函数[重复]

如何将字节数据从套接字写入 C 中的无符号字符向量? [关闭]

C#_批量插入数据到Sqlserver中的四种方式