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 ++通过索引删除指针向量中的值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章