2012-06-27 44 views
-1

我定義了很多deques,當我需要做一些擦除或彈出所有的東西時,我只需要對每個deque進行特別的設置。 我認爲可以使它更容易的是把deques放入一個數組或列表中,我可以循環。如何創建一個deques數組?

我想要做的就是這樣的事情(Basicly只是僞代碼):

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

(但不工作)

+0

定義 「不工作」。 –

+0

數組沒有'length'參數(這不是Java),您需要明確知道長度或以某種方式計算它。這個類型也必須匹配,'deque deques [] = {..};' - 使用'vector'就像Andrew回答的那樣...... – Nim

回答

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

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

如果您comiler支持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初始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"; 
}