2013-08-18 1 views
0

내 자신을 일반적인 방법으로 결합하는 방법 typedef 노드 { int data; int data1; 노드 * 다음} forward_list를 만드시겠습니까? 나는 노드 * 다음 (즉, typedef 노드 (int 데이터, int 데이터 1))를 버리고 STL이 forward_list를 통해 포인터를 관리하도록 만들 수 있다고 생각하지만 특정 노드에 대한 포인터를 어떻게 삭제합니까? forward_list에있는 표준 iterator는 long int이며 Node는 아닙니다 ; 그래서 노드를 사용하여 연결된 목록을 만들면 해당 목록에서 노드을 어떻게 삭제합니까?C++의 forward_list에 자신의 Node 구조를 갖는 방법은 무엇입니까?

답변

0

은 내가

예 이것은 당신이 내가 포인터를 삭제 어떻게

을해야 할 것입니다 옆에있는 노드 *을 던져하고 STL이 포인터를 관리 할 수 ​​있다고 생각 특정 노드?

std::forward_list::remove 
std::forward_list::erase_after 
std::forward_list::remove_if 
std::forward_list::pop_front 
std::remove 
std::remove_if 

목록

어떻게 그 목록에서 노드를 삭제합니까에서 노드를 삭제하는 다른 알고리즘을 제공? 나는 forward_list에서 다시 노드 *을 얻는 방법

, 나는 내 구조체 노드가 forward_list에 일단 당신이, 즉, 완전히 내 질문에 대답 생각하지 않습니다이 link

+0

의 예에 따라? 예를 들어 누군가가 함수를 작성하라고 요구합니다. removeNodefromList (forward_list input_list, Node * to_remove) - 어떻게 작성하겠습니까? 반복자를 사용하여 요소를 반복하는 경우 각 요소가 Node * – user2044989

+0

인데도 Node *를 돌려받을 수 없습니다. removeNodefromList와 같은 함수로 대체해야합니다 (forward_list , std :: forward_list :: const_iterator)'를 사용하고 표준 삭제 알고리즘을 사용합니다. C++ 라이브러리를 사용하면 포인터 대신에 반복자를 사용하려고합니다. 이 상황에서'std :: list'가 더 효율적이라는 것에주의하십시오. –

+0

물론 iterator로 바뀌면 사소한 일입니다. 그래서 누군가가 나에게 구조체 노드를 제공하고 그 중에서 하나의 링크 된 목록을 만들 것을 요청한다면, 나는 그 경우에 forward_list STL을 사용해서는 안된다. 설계자는 반복자에 대한 개념이 없으므로 Node와 Node *에서 모든 API를 작성하도록 요청할 것이기 때문에 Node *에서 반복자로 API를 다시 정의하는 것은 괜찮지 않을 것입니다. 그래서 나는 내 자신의 linkedlist 클래스를 작성하고 포인터를 직접 처리해야합니까? – user2044989

관련 문제