2014-10-30 2 views
0

단순 링크 된 목록 : 사용자가 사용하는 주요 장점/단점이 간단한 정의 STL에서 목록과 목록 컨테이너를 연결 무엇단순 연결 목록 Vs STL :: list. 어느 것이 가장 좋습니까?

struct Node { 
int x; 
Node *next; 
}; 

? 방대한 양의 데이터가있는 LL의 목록 성능은 어떻습니까?

+2

현대의 C++에서는 간단한 목록처럼 가볍고 편리한 STL 스타일의 인터페이스를 사용하여'std :: forward_list'를 사용할 수 있습니다. 그러나 '벡터'는 대개 ​​어느 쪽보다 나은 선택입니다. –

+5

모든 STL 컨테이너의 전공 프로는 (1) 이미 구현되어 있습니다. 작성하는 데 시간을 들일 필요가 없습니다. (2) 이미 잘 사용되고 잘 테스트되어있어 아마도 버그가있을 수 있습니다. 무료 코드 대 새로운 코드, (3) 이미 C++ 프로그래머가 함께 작업하는 방법을 알고있는 대규모 풀이 있습니다. –

+2

"단순 연결 목록 Vs STL :: list", 어느 쪽도 아니더라도 연결된 목록 성능은 절대적으로 끔찍합니다. – Borgleader

답변

5

표면적으로는 질문이 모호한 것처럼 보일 수 있습니다. 대답은 “ std::list이 더 안전하고 효율적이며, ”입니다.

그러나 이러한 측면은 부적합합니다.

std::list은 일반적으로 다른 표준 라이브러리 컨테이너보다 이점이 없습니다. C++ 03까지 까지은 구현에 따라 일정한 시간 스플 라싱을 제공 할 수 있습니다. 그러나 가능한 이점은 C++ 11에서 그 size()이 일정 시간 (하나 또는 다른 하나는 일정한 시간이 될 수 있지만 둘 다 가질 수는 없음)을 요구함으로써 제거되었습니다.

따라서 일정 시간의 연결 또는 연결된 목록의 다른 장점을 원할 경우 이외의 문자를 사용하려면 이 있어야합니다.

귀하의 DIY 가정 재배 목록.


일정 시간 크기 요건 : C++ 11 §23.2.1/4 표 96 :

a.size()size_typedistance(a.begin(), a.end()) 열이 일정한

, 반품 종류, 조작 의미복잡도.

+1

'list'는 안정된 반복자와 단일 요소의 일정한 시간의 삽입과 제거를 가지고 있습니다 (어디에 있는지 알고 있다면). 이들은 때로는 유용한 이점입니다. –

+0

@MikeSeymour : 순차적으로 설정된 위치에서 일정 시간 삽입 및 제거하는 것은 예를 들어 '표준 :: 벡터'. 그렇다면'std :: list'의 캐시 깨짐 행위를 피하십시오. http://en.wikipedia.org/wiki/Gap_buffer –

7

대부분의 경우 표준 컨테이너는 프로그래머간에 테스트되고 잘 알려져 있기 때문에 사용하는 것이 좋습니다. 표준 C++ 라이브러리가

std::forward_list 

같은 이름을 자신의 단일 연결리스트를 가지고 있음을 고려 그래서 사용자 정의 단일 연결리스트 또는 std::forward_list을 사용하는 것이 좋습니다 것 같은 소리를 할 수 있습니다 질문입니다. 나는 조언을 쓸 것입니다 std::forward_list

그럼에도 불구하고 표준 C++ 라이브러리는 push_back이라는 방법으로 하나의 링크 된 목록이 필요합니다. 그리고 I already suggested that the C++ Committee should add such a container to the C++ standard library. 나는 심지어 그것의 이름을 줬다! :)

std::x_forward_list 
+1

그리고 그들은 그것을 회상했다. –

+1

@ Lightness 궤도의 종족 당신을 제외하고는 아무도 웃지 않았습니다. –

+0

다른 제안들 중 하나를 떠 올렸을 것입니다. 종종 이름을 부르기 위해 쓰이는 스레드가 있습니다. 꽤 재미있을 수 있습니다. 이것에 관해서는, 당신의 대답에 대한 링크를 추가했습니다. –

1

STL은 이미 존재하고 사용하고, 그것은 일반적이며 대부분의 유형에서 작동 테스트되었습니다, 표준 많이 설명되어 있습니다, STL 컨테이너의 성능은 일반적으로 표준의 일부 당신이 얻을 것이다, 그래서이다 성능은 표준 이상으로 보장됩니다.

자국산 목록은 사용자의 요구에 맞게 특별히 사용자 정의 할 수 있으며 데이터의 고유 한 측면을 기반으로 성능을 향상시킬 수있는 경우도 있지만 보증은 없으며 성능은 당신은 당신의 데이터를 위해 그것을 스스로 만듭니다. 자체 테스트를 수행하고 직접 구현해야합니다.

2

필자는 개인적으로 STL 컨테이너를 사용할 때마다 링크 된 목록을 디자인하는 것보다 생산적이라고 생각합니다. 그것은 아마도 가장 좋은 이익 일 것입니다. 시간은 돈이다.

관련 문제