我正在阅读有关使用SDL操纵杆输入处理的教程,我正在努力处理部分代码。
在.h文件中我得到了:
std::vector<std::pair<Vector2D*, Vector2D*> > m_joystickValues;
并在.cpp文件中我得到了:
m_joystickValues.push_back(std::make_pair(new Vector2D(0,0),new Vector2D(0,0)));
在这种情况下,我有一个操纵杆,如果有很多操纵杆会有更多的push_backs,我想访问“m_joystickValues”中的地址,所以我可以在一个干净的功能中删除它们。
任何人都知道如何使用for循环执行此操作。感谢
答案 0 :(得分:4)
例如,您可以使用基于范围的for语句
for ( auto &p : m_joystickValues )
{
delete p.first;
delete p.second;
}
使用普通的for语句
也可以这样做for ( size_t i = 0; i < m_joystickValues.size(); i++ )
{
delete m_joystickValues[i].first;
delete m_joystickValues[i].second;
}
或者您可以将标准算法std::for_each
与适当的lambda表达式一起使用。它与使用带迭代器的for语句类似。
答案 1 :(得分:1)
for(int i = 0; i < m_joystickValues.size(); i++)
{
m_joystickValues[i] //do something with this
}
这是你在找什么?此外,您可以使用at
功能,因为它更安全。
答案 2 :(得分:1)
for(auto& i : m_joystickValues)
{
delete i.second;
delete i.first; // or do whatever
}
在循环结束时,您可以删除整个矢量
m_joystickValues.erase(m_joystickValues.begin(), m_joystickValues.end());