2011-05-12 3 views
35

(내가 STL을 말할 때, 나는 주위 컨테이너, 반복자, 알고리즘과 펑터를 회전 템플릿 라이브러리에 대해 이야기하고있다.)이 질문과 함께, 일반 컨테이너와 같은 std::string 대부분 작동 생각 후에 마음에 온
(반복자 포함) 및 beginend 기능하는 기능 size 용기 정상 작동 STL 알고리즘 이들 모두 사용할 가능성/반복기들은 (예 transform, sort, find 등)를 통해 범위이다.std :: string은 STL의 일부입니까?

그러나 동시에 임의의 데이터를 저장하는 컨테이너의 그림에 맞지 않으므로 컨테이너 자체가 아닙니다. 또한, 대부분의 구성원 함수 (예 : substr, find_first_of 등)를 통해 포함 된 데이터에서 작동하지만 true 컨테이너는이를 처리하지 않고 알고리즘에서 처리하도록합니다.

또한 cplusplus reference site 및 C++ 표준은 실제 컨테이너와 함께 std::string을 고유 한 범주로 나열하지 않습니다.
그러나 SGI's STL site의 경우 basic_string (결과적으로 string typedef)은 다른 컨테이너에 언급되어 있고 basic_string reference site에는 "컨테이너"범주에 속한다고 나와 있습니다.

이제 내 질문은 string이 실제로 STL의 일부인지 아니면 별개의 라이브러리 자체인지 여부입니다.
그리고 지금 그것이 STL에 속한다면 Stepanov가 개발 한 원래의 STL과 다릅니 까?

+9

누가이 시점에서 STL에 관심이 있습니까, 역사적인 호기심 이외에? – ildjarn

+4

@ildjarn : 글쎄, 나는 지식을 축적하고 싶다. : P 또한 작은 'history' 태그를 보시겠습니까? :) 나는이 물건에 관심이있어. 그래서 물어봐. – Xeo

+1

아, 그렇습니다. 실제로'history' 태그를 보지 못했습니다 : -] – ildjarn

답변

25

아니요. 네, 그렇습니다. C++ 표준 라이브러리의 기반이 된 부분있는

  • 실제 HP/SGI의 STL, 원래의 라이브러리 : 포함

    There are varying definitions of "the STL"

    . 여기에는 컨테이너, 반복자 및 알고리즘이 포함되었습니다. 문자열은 이 아니고 일부입니다.

  • SGI STL 라이브러리를 기반으로 한 C++ 표준 라이브러리의 일부 : 컨테이너, 반복기 및 알고리즘. 아직 문자열이 없습니다.

  • 모든 C++ 표준 라이브러리. 이 정의는 논리 나 현실에 절대적으로 기초가 없지만, 뒤이어서라면 std::string이 포함됩니다. C++ 표준화 된 이후 실제 STL이 개발했다고

주 (일부 십삼년 전에, 기억), 그들은 문자열과 같은 표준에 가서 물건의 일부를 뒤쪽으로 채택했습니다. 이것은 이 아니며은 원래 그들이 1998 년에 있었던 것을 의미하지만 ... "호환성"을 이유로 여기에 있습니다.

STL과


요약 용기 알고리즘 및 반복자이었다.

문자열과 스트림이 C++ 98 용으로 채택 된 후 backwards - 최신 SGI STL 용으로 채택되었습니다.

문자열이 "STL의 일부"인지 여부는 논리와 이유를 따르거나 표준 라이브러리 "STL"을 호출하는지에 따라 다릅니다.

희망이 도움이됩니다.

+0

하나의 작은 메모 : 적어도 그것은 원래 배포 되었기 때문에 HP STL은 실제로'bstring' (기본 문자열) 클래스를 포함합니다 ('basic_string'과 착각하지 않아야합니다). 사소한 데모 프로그램에서 C 스타일 문자열을 사용합니다 (하지만 그들은 고유 한 문자열 클래스가있는 모든 컴파일러를 다루는 것을 원하지 않는 것 같습니다). –

2

참으로 STL의 일부입니다. 그리고 std :: string은 basic_string typedef입니다. 그것은 문자열 의미론을 가진 데이터 저장을위한 전문화 된 (C++ "전문화"의미가 아닙니다.) 컨테이너입니다. Stepanov에 대한 생각이 없습니다. 언급할만한 점은 STL은 컨테이너 서브 파트뿐만 아니라 "표준 템플릿 라이브러리"라는 것입니다. 여기에는 알고리즘, 스트림 및 일부 특성이 포함됩니다.

+0

@ 재 : 응? 스트림, 알고리즘 및 반복자는 STL에서 표준으로 채택 된 유일한 요소입니다. –

+0

@Tomalak : 오, 하천. 이제 그걸 IOstream으로 읽었을 것입니다. 아마도 다른 답변에서도 처음에는 잘못 생각했기 때문입니다.> _> " – Xeo

+0

@Xeo : 다른 점은 ...? –

9

실제 답변은 없습니다. 한편, std::string은 다른 컨테이너와는 완전히 독립적으로 개발되었습니다. 반면에 랜덤 액세스 컨테이너의 모든 요구 사항을 충족시키기에 충분했습니다. 이를 "STL"의 일부로 분류할지 여부는 전적으로 귀하에게 달려 있습니다. 결국 "STL"은 합의 된 단일 정의가 없으며 갑자기 그 가능성이 있음을 지적합니다 명확한 의미를 얻는 것은 멀리 떨어져 있습니다 (멋지게 넣는 것).

IOW, "STL"은 사람들이 그것을 사용하여 적어도 세 가지 다른 것을 의미하기 때문에 사용하기에 약한 약어입니다. 그러나 불행히도 STL은 더 잘 정의 된 의미로 약어가 없기 때문에 STL은 계속 사용됩니다. 아마도 계속 그렇게 할 것이며 (그리고 계속 커뮤니케이션을 방해 할 것입니다) 무기한으로.

관련 문제