我定义了很多双端队列,当我需要执行擦除或弹出所有这些操作时,我只需要专门针对每个双端队列执行此操作。我认为可以更容易的是将双端队列放在某种数组或列表中,我可以循环遍历。
我想做的是这样的(基本上只是伪代码):
deque<f32> pos, vel, rot, prop;
deque deques[] = {pos, vel, rot, prop};
for(i=0; i<deques.length; i++) deques[i].pop_back();
(但它不起作用)
std::vector<std::deque<f32>> array;
std::deque pos, vel, rot, prop;
array.push_back(pos);
array.push_back(vel);
array.push_back(rot);
array.push_back(prop);
如果您的编译器支持 C++11 功能,则替代方法std::vector
是std::array
:
std::array<std::deque<f32>, 4> deques;
std::for_each(deques.begin(),
deques.end(),
[](const std::deque<f32>& a_d)
{
std::cout << a_d.size() << "\n";
});
如果没有,您可以std::vector
按照已经说明的方式使用。要std::vector
使用初始deque<f32>
元素创建:
std::vector<std::deque<f32> > deques(4); // 4 empty deque<f32>s
for (std::vector<std::deque<f32> >::iterator i = deques.begin();
i != deques.end();
i++)
{
std::cout << i->size() << "\n";
}
在这里,您声明一个简单的非托管数组:
deque deques[] = {pos, vel, rot, prop};
...但是您忘记声明其内容的完整专用类型,而deque<f32>
不仅仅是裸deque
.
现在,您尝试迭代您的数组,
for(i=0; i<deques.length; i++) deques[i].pop_back();
...但是简单的 C 风格数组没有像length
. 您似乎在尝试编写 C#,而不是 C++!
试试这个:
std::array<std::deque<float>, 4> deques = { pos, vel, rot, prop };
for(auto i=0; i<deques.size(); i++) deques[i].push_back(1.0f);
等等