[C++] std :: string은 STL의 일부입니까?


Answers

아니 정말. 네, 그렇습니다.

"STL"에 대한 다양한 정의가 있습니다 .

  • 실제 HP / SGI STL, 원본 라이브러리. C ++ 표준 라이브러리의 일부분입니다. 여기에는 컨테이너, 반복자 및 알고리즘이 포함되었습니다. 문자열은이 부분이 아닙니다 .

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

  • 모든 C ++ 표준 라이브러리. 이 정의는 논리 또는 현실에 절대적으로 접지가 없지만, 뒤따라 오면 std::string 이 포함됩니다.

실제로 STL은 C ++이 표준화 된 이후 (13 년 전 기억하고 있음), 문자열과 같이 표준에 들어간 것들을 거꾸로 채택했습니다. 이것은 그들이 원래 1998 년에 있었다는 것을 의미하지는 않지만 "호환성"을 이유로 존재합니다.

개요

STL은 컨테이너, 알고리즘 및 반복기였습니다.

문자열과 스트림은 C ++ 98에서 채택되었으며 이후 SGI STL에 적용되었습니다.

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

희망이 도움이됩니다.

Question

(STL을 말할 때 컨테이너, 반복기, 알고리즘 및 펑터 (functor)를 중심으로하는 템플릿 라이브러리에 대해 이야기하고 있습니다.)
이 질문은 std::string 대부분이 beginend 함수 (반복자 포함), size 함수 및 모든 컨테이너 / 컨테이너에서 작동하는 일반 STL 알고리즘에 사용할 수있는 기능과 함께 정상 컨테이너와 같이 동작합니다. 반복자 (예 : transform , sort , find 등)를 통해 범위를 지정합니다.

그러나 동시에, 임의의 데이터를 저장하는 컨테이너의 그림에 맞지 않으므로 컨테이너 자체가 아닙니다. 또한 substr , find_first_of 등과 같은 멤버 함수를 통해 포함 된 데이터를 처리하지만 true 컨테이너는 그렇게하지 않고 알고리즘이 처리하도록합니다.

또한 cplusplus 참조 사이트 및 C ++ 표준은 실제 컨테이너와 함께 std::string 고유 한 카테고리에 나열하지 않습니다.
그러나 SGI의 STL 사이트 에서 basic_string (결과적으로 string typedef)은 다른 컨테이너와 함께 언급되며 basic_string 참조 사이트 는 "컨테이너"범주에 속한다고 명시합니다.

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




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




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

IOW, "STL"은 사람들이 그것을 사용하여 3 가지 이상의 다른 것들을 의미하기 때문에 사용하기에 형편없는 약어입니다. 그러나 불행하게도 더 나은 정의가있는 약어가 없으므로 STL은 계속 사용되며 앞으로도 계속 사용할 것입니다. 그렇게하고 (그리고 계속 커뮤니케이션을 방해한다).