2012-06-27 3 views
-1

많은 deques가 정의되어 있으며, 지우거나 팝하는 것과 같은 일을해야 할 때, 나는 특별히 모든 deque에 그것을 수행해야했습니다. 내가 생각하기에 쉬운 점은 루프를 반복 할 수있는 배열이나 목록에 deques를 넣는 것이 었습니다. 당신의 comiler는 C++ 11 개 기능을 지원하는 경우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 [] = {..};'- Andrew가 대답하는대로'vector'를 사용합니다 ... – Nim

답변

1

: 초기 deque<f32> 요소와 std::vector 만들려면

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

: 내가 원하는 무엇

이 (Basicly 단지 의사) 같은 것입니다 , 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::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"; 
} 
관련 문제