-1

我定义了很多双端队列,当我需要执行擦除或弹出所有这些操作时,我只需要专门针对每个双端队列执行此操作。我认为可以更容易的是将双端队列放在某种数组或列表中,我可以循环遍历。

我想做的是这样的(基本上只是伪代码):

deque<f32> pos, vel, rot, prop;
deque deques[] = {pos, vel, rot, prop};
for(i=0; i<deques.length; i++) deques[i].pop_back();

(但它不起作用)

4

3 回答 3

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);
于 2012-06-27T10:10:24.257 回答
1

如果您的编译器支持 C++11 功能,则替代方法std::vectorstd::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";
}
于 2012-06-27T10:13:58.167 回答
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);

等等

于 2012-06-27T10:15:19.477 回答