如何创建一系列deques?

时间:2012-06-27 10:08:53

标签: c++ arrays deque

我有很多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();

(但它不起作用)

3 个答案:

答案 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);