SGI slist
과 C++ 11 std::forward_list
은 내가 놓친 것이없는 한 나와 똑같이 보입니다. 둘 다 단일 연결 목록을 구현합니다.SGI slist와 C++ 11 forward_list의 차이점은 무엇입니까?
C++ 표준위원회가 컨테이너를 C++ 0x에 추가 할 때 slist라는 이름을 채택하지 않고 대신 forward_list라는 새 이름을 선택했기 때문에 차이점이 있다고 가정합니다.
SGI slist
과 C++ 11 std::forward_list
은 내가 놓친 것이없는 한 나와 똑같이 보입니다. 둘 다 단일 연결 목록을 구현합니다.SGI slist와 C++ 11 forward_list의 차이점은 무엇입니까?
C++ 표준위원회가 컨테이너를 C++ 0x에 추가 할 때 slist라는 이름을 채택하지 않고 대신 forward_list라는 새 이름을 선택했기 때문에 차이점이 있다고 가정합니다.
하나의 큰 차이점은 size()
멤버 함수가없는 것입니다. 여기서, sgi::slist
은 그렇지 않습니다. 이것에 대한 동기는 O (N) size()
이 문제가 있다는 것입니다. N2543에는 forward_list
의 디자인 결정에 대한 자세한 내용이 있습니다.
는 업데이트 :
는 최근이 주제에 더 가까이 볼 수있는 좋은 구실을했다. slist
에는 O (1)이라고 생각하도록 유혹 될 수 있지만 실제로 O (N) 인 다른 멤버 함수가 있습니다. 이들은 다음을 포함한다 : 한마디로
iterator previous(iterator pos);
const_iterator previous(const_iterator pos) const;
iterator insert(iterator pos, const value_type& x);
iterator erase(iterator pos);
void splice(iterator position, slist& x);
void splice(iterator position, slist& x, iterator i);
, 당신은 매우주의, 당신은 slist
를 사용하여 상당한 성능 문제를 끝낼 수 있습니다하지 않으면. 대신 std::forward_list
을 사용하면 단일 연결 목록에서 예상되는 O (1) 성능을 얻을 수 있습니다.
답장을 보내 주셔서 감사합니다. 그 신문을 읽는 것은 흥미 롭습니다. size() 멤버 함수를 포함하지 않기로 결정한 것에 동의합니다. 나는 std :: list를 사용할 수있는 크기를 알아야한다고 가정합니다. – Ricky65
간단히 말해 sgi :: slist와 forward_list는 매우 유사합니다.
forward_list에는 sgi :: slist에 포함 된 size() 멤버 함수가없고 forwardlist에는 sgi :: slist에 포함되지 않은 emplace_after 멤버 함수가 포함된다는 차이점이 있습니다. 또한 forward_list는 sgi :: slist와 같은 멤버 함수 삽입 및 삭제 기능을 제공하지 않습니다.
다른 점을 알고 계시면 언제든지 언급 해주십시오.
최근 다른 차이점이 있습니다. 메서드 splice_after
에는 다른 인터페이스와 다른 동작이 있습니다. 두 번째 인수로에서 이동하고있는 컨테이너를 통과 할 필요 forward_list
1) :
void splice_after(const_iterator pos, forward_list& other,
const_iterator first, const_iterator last);
SLIST :
void splice_after(iterator pos, iterator before_first, iterator before_last)
이 오버로드에 대한 유사하다.
2) 위에서 언급 한 과부하에 대한 특정 : 마지막 반복기는 다르게 해석됩니다! slist가 [before_first + 1, before_last + 1> 범위를 이동하는 경우 forward_list는 <의 범위를 처음, 마지막으로> 이동합니다. 따라서 코드를 변환 할 때 (예 : GCC에서 slist가 더 이상 사용되지 않으므로) last = before_last + 1을 사용해야합니다.
주요 차이점은 forward_list 객체가 단일 연결 목록이므로 유일한 것일 수 있다는 것입니다. 다소 작고 효율적인 대가로 전달을 반복했습니다. std :: list는 이중 연결 목록 –