在c ++中使用for循环遍历向量

时间:2014-07-30 23:03:34

标签: c++

我正在阅读有关使用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循环执行此操作。感谢

3 个答案:

答案 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());
相关问题