-1

私は多くの両端キューを定義しており、それらすべてを消去またはポップする必要がある場合は、すべての両端キューに対してそれを実行する必要がありました。私が簡単にできると思ったのは、deques をある種の配列またはリストに入れて、ループできるようにすることでした。

私がやりたいことは次のようなものです(基本的には疑似コードのみ):

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

ここでは、単純なアンマネージ配列を宣言します。

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 に答える
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::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";
}
于 2012-06-27T10:13:58.167 に答える