2013-08-19 4 views
0

std :: list는 이중 연결 목록입니다. 즉, 반복기에 대한 액세스만으로 목록에서 항목을 제거 할 수 있어야합니다.반복자에 대한 액세스 권한 만 가진 std :: list에서 항목 제거

어쩌면 제 질문이 명확하지 않을 수 있습니다.

#pragma once 

#include <list> 


typedef std::list<int> IntList ; 
typedef IntList::iterator IntIterator; 

class IntHiddenList 
{ 
private: 
    IntList list; 
public: 
    IntIterator AddInt(int x) 
    { 
     list.push_front(x); 
     return list.begin(); 
    } 
}; 

int main() 
{ 
    IntHiddenList a; 

    IntIterator it = a.AddInt(5); 


    // How would I go about deleting 5 from the list using only "it"? 
} 
+0

예. 할 수 있습니다. – andre

+0

이제는 질문이 간단 해 보이기 때문에 코드의 일부를 표시하고 수행하려고하는 것을 더 잘 설명 할 수 있습니다. 그러면 원하는 답을 얻지 못할 수도 있습니다. – hetepeperfan

+0

가능하다면 목록의 크기를 업데이트하는 것은 어색 할 것이며위원회는 목록의 크기에 대한 쉬운 액세스를 유지하는 것이 중요한 기능이라고 생각합니다. –

답변

2

예, 개념 상 가능합니다. 그러나 표준 라이브러리는이를 허용하지 않습니다 (컨테이너와 반복자를 지울 것을 요구합니다).

행운을 얻으 셨습니다. 부스트는 원하는대로 정확하게 수행 할 수있는 boost::instrusive (http://www.boost.org/doc/libs/1_54_0/doc/html/intrusive/list.html)의 기능을 제공합니다.

+0

감사합니다. 정확히 내가 알 필요가있는 것. – bofjas

0

아니요, 요소를 삭제하려면 목록이 필요합니다.

STL에서 반복기는 데이터에 대한 포인터 만 보유하고 컨테이너를 통해 이동하는 작업을 제공합니다. 좋은 테이블 설명 here을 볼 수 있습니다.