C++ 在c+中使用for循环遍历向量+;
我正在阅读一篇关于使用SDL处理操纵杆输入的教程,其中一部分代码我很难理解 在.h文件中,我得到: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_
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是的,那更整洁。那正是我要找的。谢谢!那正是我要找的。谢谢!