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

C++ 在c+中使用for循环遍历向量+;,c++,C++,我正在阅读一篇关于使用SDL处理操纵杆输入的教程,其中一部分代码我很难理解 在.h文件中,我得到: std::vector<std::pair<Vector2D*, Vector2D*> > m_joystickValues; m_joystickValues.push_back(std::make_pair(new Vector2D(0,0),new Vector2D(0,0))); 在这种情况下,我有一个操纵杆,如果有许多操纵杆,那么会有更多的推回,我想访问“m_

我正在阅读一篇关于使用SDL处理操纵杆输入的教程,其中一部分代码我很难理解

在.h文件中,我得到:

std::vector<std::pair<Vector2D*, Vector2D*> > m_joystickValues;
m_joystickValues.push_back(std::make_pair(new Vector2D(0,0),new Vector2D(0,0)));
在这种情况下,我有一个操纵杆,如果有许多操纵杆,那么会有更多的推回,我想访问“m_joystickValues”中的地址,这样我就可以在一个干净的函数中删除它们

任何人都知道我如何使用for循环来实现这一点。感谢(inti=0;ifor(int i = 0; i < m_joystickValues.size(); i++) { m_joystickValues[i] //do something with this } { m_joystickValues[i]//用这个做点什么 } 这就是你要找的吗?此外,您还可以使用
at
函数,因为它更安全。

for(int i=0;i

这就是你要找的吗?此外,您还可以使用
at
函数,因为它更安全。

例如,您可以使用基于范围的For语句

for ( auto &p : m_joystickValues )
{
   delete p.first;
   delete p.second;
}
for ( size_t i = 0; i < m_joystickValues.size(); i++ )
{
   delete m_joystickValues[i].first;
   delete m_joystickValues[i].second;
}
使用普通for语句也可以做到这一点

for ( auto &p : m_joystickValues )
{
   delete p.first;
   delete p.second;
}
for ( size_t i = 0; i < m_joystickValues.size(); i++ )
{
   delete m_joystickValues[i].first;
   delete m_joystickValues[i].second;
}
for(size_t i=0;i

或者您可以使用标准算法
std::for_each
和适当的lambda表达式。这类似于在迭代器中使用for语句。

例如,您可以使用基于范围的for语句

for ( auto &p : m_joystickValues )
{
   delete p.first;
   delete p.second;
}
for ( size_t i = 0; i < m_joystickValues.size(); i++ )
{
   delete m_joystickValues[i].first;
   delete m_joystickValues[i].second;
}
for(auto& i : m_joystickValues)
{
    delete i.second;
    delete i.first; // or do whatever
}
使用普通for语句也可以做到这一点

for ( auto &p : m_joystickValues )
{
   delete p.first;
   delete p.second;
}
for ( size_t i = 0; i < m_joystickValues.size(); i++ )
{
   delete m_joystickValues[i].first;
   delete m_joystickValues[i].second;
}
for(size_t i=0;i
或者您可以使用标准算法
std::for_each
和适当的lambda表达式。这类似于在迭代器中使用for语句

for(auto& i : m_joystickValues)
{
    delete i.second;
    delete i.first; // or do whatever
}
在循环结束时,可以擦除整个向量

m_joystickValues.erase(m_joystickValues.begin(), m_joystickValues.end());
在循环结束时,可以擦除整个向量

m_joystickValues.erase(m_joystickValues.begin(), m_joystickValues.end());

是什么阻止了你的优秀ole“
(int x=0;xIf可能的话,更改为
std::vector m_joystickValues;
以实现自动内存管理。使用,因此无需手动内存管理。在为
循环编写
时,您遇到了哪些问题?您是否回顾过您的教科书,以提醒自己它们是如何工作的?是什么让您停滞不前od ole'
用于(int x=0;xIf可能,更改为
std::vector m_joystickValues;
以实现自动内存管理。使用,因此无需手动内存管理。为
循环编写
时,您遇到了哪些问题?您是否查阅过教科书以提醒自己它们是如何工作的?迭代器版本缺失:-)(使用
std::vector::iterator
而不是
auto
^^)迭代器版本缺失:-)(使用
std::vector::iterator
而不是
auto
^^),可以使用
m_joystickValues.clear();
而不是
擦除整个过程range@Jarod42是的,这更整洁。您可以使用
m_joystickValues.clear();
而不是
擦除整个range@Jarod42是的,那更整洁。那正是我要找的。谢谢!那正是我要找的。谢谢!