2011-03-31 3 views
0

여기 insert() 부분에 오류가 발생하며 잘못 처리하고 있습니다. 다른 매개 변수와 매개 변수 수를 시도했지만 아무 것도 작동하지 않는 것 같습니다.(C++) deque insert()를 사용할 수 없습니다. 무엇을 잘못하고 있습니까?

m_oGameObjectList은 IGameObjects (기본 클래스)의 deque입니다.
m_sPosition은 3 개의 정수 (X, Y, Z)가있는 구조체입니다.
gameObjectIGameObject에서 파생 된 개체에 대한 참조입니다.

for (int i = 0; i < m_oGameObjectList.size(); i++) 
{ 
    if (gameObject.m_sPosition.Z > m_oGameObjectList[i].m_sPosition.Z) 
    { 
     m_oGameObjectList.insert(i, gameObject); 
     i = m_oGameObjectList.size(); 
    } 
} 

답변

3

insertiterator합니다. 사용

m_oGameObjectList.insert(m_oGameObjectList.begin() + i, gameObject); 

당신은 또한 지금 당신은 슬라이스하고, 당신의 deque에 포인터를 사용해야합니다 - gameObject

+0

완벽하게 작동합니다. – NyanPrime

0

이로을 IGameObject에서 파생 된 개체를 삽입하려고의 IGameObject 부분의 사본을 삽입 deque <IGameObject>은 참조 자체가 아닌 참조에 객체 복사본을 저장하려고하므로 작동하지 않습니다.

대부분의 경우 컨테이너에 클래스 hiearchy를 저장하려고하면 기본 클래스에 대한 포인터 컨테이너를 사용하면됩니다.

0

insert을 호출하면 이큐에 정수 인덱스가 아닌 반복자가 전달됩니다. 똑같이 잘 작동 여러 다른 솔루션이 있기는하지만 ...

my_deque_iterator iter = m_oGameObjectList.begin(); 
std::advance(m_oGameObjectList, i); 

: 당신이 양단 큐 반복자 정수 인덱스를 변환 할 수있는 한 가지 방법을 통해입니다.

push_backpush_front과 같은 deque 기능을 사용할 수 있습니다.이 기능은 양 큐의 앞뒤에 넣을 객체를 각각 가져옵니다.

관련 문제