我有很多deques定义,当我需要做擦除或弹出所有这些时,我只需要特别针对每个deque。 我认为可以更容易的是将deques放在一个数组或某种列表中,我可以循环使用。
我想做的是这样的事情(基本上只是伪代码):
deque<f32> pos, vel, rot, prop;
deque deques[] = {pos, vel, rot, prop};
for(i=0; i<deques.length; i++) deques[i].pop_back();
(但它不起作用)
答案 0 :(得分:1)
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);
答案 1 :(得分:1)
如果您的编译器支持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";
}
答案 2 :(得分:1)
在这里,您声明一个简单的非托管数组:
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);
等