2012-06-27 3 views
-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(); 

(Но это не работает)

+0

Определение "не работает". –

+0

массивы не имеют параметра 'length' (это не Java), вам нужно явно знать длину или как-то вычислить ее. Тип также должен совпадать, 'deque deques [] = {..};' - использовать 'vector', как ответил Эндрю, хотя ... – 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 как уже указано. Для создания 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"; 
} 
Смежные вопросы