forward_list는 (표준 목록 컨테이너와 달리) 단일 링크 된 목록입니다. list에는 앞뒤 모두를 삽입하는 함수가 있지만 forward_list에는 요소를 뒤에 삽입하는 함수가 없습니다 (push_back과 같은 것). 목록 뒤쪽에 요소를 삽입 할 수없는 이유는 무엇입니까?std :: forward_list - 끝에 요소를 삽입하는 방법
답변
단일 링크 된 목록과 비교할 때 forward_list
에 오버 헤드가 없어야한다는 의도적 인 디자인 결정입니다. 이것은 C++ 11 표준 (23.3.4.1)에 기록됩니다 :
참고 : 그것은
forward_list
이 단독 목록 연결된 손으로 쓴 C 스타일의 제로 공간이나 시간의 오버 헤드 상대가 있다는 것입니다. 이 목표와 충돌하는 기능은 생략되었습니다.
목록 끝까지 포인터를 유지하면 포인터의 공간 오버 헤드와 시간 오버 헤드 (요소가 삽입되거나 목록의 끝에 지워질 때 포인터 업데이트)가 추가됩니다.
나는이 데이터 구조의 정의이기 때문에
을 말하기에 더 좋은 방법이 없습니다. push_back
과 같이 다른 데이터 구조를 사용해야합니다.
== 편집 == 내가 조금 자세히 설명하려고합니다 :
그것은 당신이 마지막 요소 push_back
에 반복자가있는 경우 O 것은 사실이다 (1).
그러나 마지막 요소에 반복기를 유지하면 erase
과 같은 다른 연산에서 오버 헤드가 발생할 수 있습니다.
일 것이다. 단일 링크 된 목록은 본질적으로 'back' 또는'push_back' 멤버를 가지고 있지 않다. 이것은 디자인 선택이었습니다. 그것은 머리와 함께 꼬리를 쉽게 저장할 수 있습니다. – David
물론 있습니다. 그것은 juanchopanza에 의해 코멘트에조차있다. 'forward_list'는 고전적인 단방향 링크리스트 데이터 구조를 직선적 인 방식으로 구현합니다. 아무것도 덜 중요하지 않으며 더 중요한 것은 없습니다. – luk32
하지만 '단일 링크 목록'이 아니라 '순방향 링크 목록'입니다.내가 스스로 질문하는 것에 대해 언급 할 때,이 미래는 다른 운영 성과에 영향을 미칠 것입니다. –
- 1. 풀 메모리 및 std :: forward_list
- 2. C++에서 std :: forward_list swap() 구현
- 3. std :: forward_list 멤버를 정적으로 구현할 수 있습니까?
- 4. 문자열의 끝에 NULL을 삽입하는 방법
- 5. docx4j를 사용하여 요소를 삽입하는 방법
- 6. std :: vector 중간에 요소를 삽입하는 가장 쉬운 방법은 무엇입니까
- 7. C++ Error3867 : 약 std :: forward_list 멤버 참조 오류에 대해
- 8. forward_list, set, list 등은 어떻게 std :: allocator를 호출합니까?
- 9. variadic 템플릿 클래스의 forward_list 만들기
- 10. 반복자 위치 뒤에 요소를 삽입하는 방법
- 11. std :: deque의 끝에 블럭 추가하기
- 12. std :: map에 반복하면서 삽입하는 중입니까?
- 13. std : queue에서 요소를 분리하는 방법
- 14. 요소를 순서 배열에 삽입하는 방법
- 15. XmlSerializer에 xml 요소를 삽입하는 방법
- 16. 중간 배열에 요소를 삽입하는 방법
- 17. std :: unordered_map에 요소를 삽입하는 동안 불필요한 생성자 호출을 피 하시겠습니까?
- 18. BLOB에 바이너리 std :: string 삽입하는 방법
- 19. 일련의 값을 std :: deque에 효율적으로 삽입하는 방법?
- 20. QXmlStreamWriter를 사용하여 XML 파일에 요소를 삽입하는 방법
- 21. std :: copy()와 동등한 끝에 삽입하고 있습니까?
- 22. 링크 된 목록에 요소를 삽입하는 방법
- 23. Splice_after 구현 forward_list
- 24. C++ std :: vector 요소를 사용하여 std :: vector 요소를 재정렬하십시오.
- 25. Scheme 목록의 끝에 요소를 추가하십시오.
- 26. 배열의 요소를 줄의 끝에 추가하십시오
- 27. 이전 요소를 std :: deque에서 가져 오는 방법?
- 28. std :: 컨테이너의 요소를 안전하게 교환하는 방법
- 29. std :: unordered_map의 std :: list 요소를 초기화하는 중
- 30. 각 개체의 끝에 변수 및 값이있는 새 개체를 삽입하는 방법
내가 그것이 O (N) 작업이 될 것입니다 아마 때문에 – David
hhhhhhh 죄송 의견을 downvote 수 있으면 좋겠다 @ALJIMohamed. 정면에서 시작하여 뒤쪽으로 가야합니다. –
@ 데이브 – juanchopanza