E D R , A S I H C RSS

BackLinks search for "STl"

BackLinks of STl


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Miscellany
          * '''일반적인 목적의 컨테이너와 알고리즘에 대한 지원'''. 표준 C++ 라이브러리에 포함되어 있는 클래스, 함수 템플릿은 Standard Template Library(STL)로 알려져 있다. STL은 표준 C++ 라이브러리의 가장 혁명적인 부분이다. 나는 밑에 이것의 특징을 요약한다.
         내가 STL을 언급하기 전에, 나는 반드시 당신이 알기에 필요한 C++ 라이브러리의 두가지의 특징을 이야기 해야한다.
         string 형의 디자인에 반영된 이러한 접근은-템플릿의 일반화- 표준 C++ 라이브러리를 통해서 반복되어 진다. IOStream? 그들은 템플릿이다.; 인자(type parameter)는 스트림에서 만들어지는 문자형으로 정의되어 있다. 복잡한 숫자(Complex number)? 역시 템플릿이다.;인자(type parameter)는 숫자를 어떻게 저장할지 정의되어 있다. Valarray? 템플릿이다.;인자(type parameter)는 각 배열에 최적화된다. 그리고 STL은 거의 모든 템플릿의 복합체이다. 만약 당신이 템플릿에 익숙하지 않다면, 지금 한발작 내디뎌 보아라.
         표준 C++ 라이브러리에서 가장 큰 뉴스는 Standard Template Library(표준 템플릿 라이브러리)인 STL이다. (C++ 라이브러리에서 거의 모든것이 템플릿이 된이후 그 이름 STL은 이제 특별한것이 아니다. 그럼에도, 이것은 라이브러리의 알고리즘과 컨테이너의 부분의 이름이다. 그래서 쓰기에 좋은 이름이기도, 나쁜 이름이기도 한다.)
         STL은 많은 조직-거의 모든 C++라이브러리-에 영향을 미치는 것 같다. 그래서 그것의 일반적인 개념과 친해지는 것은 매우 중요하다. 그들은 이해하기는 어렵지 않다. STL은 세가지의 기본적인 개념에 기반하고 있다.: container, iterator, algorithm. Container는 객체의 모음(collection)이다. Iterator는 STL 컨테이너에서 당신이 built-in 형의 인자들을 포인터로 조정하는 것처럼 객체를 가리킨다. Algorithm은 STL container와 iterator를 사용해서 그들의 일을 돕는데 사용하는 함수이다.
         배열을 위한 C++(그리고 C)의 규칙을 기억하는 것이 STl을 전체적으로 바라보는데 가장 선행되어야 할 작업이다. 우리가 알아야 할것은 정말 오직 하나의 규칙이다.:배열을 가리키는 포인터는 합법적으로 배열상의 어떠한 인자나 배열의 끝을 넘어 어떠한 인자라도 가리킬수 있다. 만약 포인터가 배열의 끝을 넘은 인자를 가리킨다면, 그것은 배열을 가리키는 다른 포인터와 비교 되어지는 셈이다.; 결과적으로 정의되지 않은 dereferencing을 수행하는 것이다.
         솔찍히 이것은 아마 당신이 찾기 함수(find function)를 작성한 방법이 아니다. 그렇지만 결코 멍청한 것이 아니고, 그것은 매우 훌륭히 일반화 된다. 당신이 이와 같은 간단한 예제를 따르면, STL에서 찾을수 있는 대다수의 생각들을 가지고 있는거다.
         이것이 STL iterator 뒤에 숨겨진 개념이다. Iterator는 STL container가 사용하기 위하여 pointer 비슷하게 설계된 객체이다. 그들은 Item 28의 스마트 포인터의 사촌격인 셈이다. 그렇지만 스마트 포인터는 STL의 iterator가 하는 것에 비하여 조금더 모호한 경향이 있다. 그렇지만 기술적 관점에서 그들은 같은 기술을 이용해서 구현된다.
         축하한다! 당신은 Standard Template Library의 한 부분을 작성한 것이다. STL은 container와 iterator를 이용하는 알고리즘 묶음을 포함하고 있다. 그리고 find는 그들중에 하나이다.
         STL에서 container는 bitset, vector, list, deque, queue, priority_queue, stack, set, map 포함한다. 그리고 당신은 이러한 어떤 container 형을 find에 적용할수 있다.
          // STL list객체를 생성한다.
         list 객체를 찾기 위한 호출을 위해서, 당신은 list의 가장 처음 인자와 list와 가장 마지막의 인자를 가리키는 iterator가 필요하다. 리크트 클래스에 의한 몇가지의 도움 될 기능들을 제외하고, 이것은 어려운 문제이다. 왜냐하면 당신은 list가 어떻게 구현되었는 가에 관한 정보가 없기 때문이다. 다행 스럽게다 리스크(list,모든 STL의 container들과 같이) 시작과 끝을 제공하는 멤버 함수로서 해결한다. 이 멤버 함수는 당신이 원하는 iterator 반환하고 위의 예제에서 해당 iterator 두가지를 찾을수 있다.
         찾기(find)가 끝났으면 그것은 찾은 인자를 가리키는, 혹은 charList.end()(찾지 못하였을때)의 iterator 객체를 반환한다. 왜냐하면 당신은 list가 어떻게 구현되었는가에 대하여 아무것도 알수 없기때문에 역시 구현된 list에서 iterator가 어떻게 되었는지 전혀 알수 없다. 그런데 어떻게 찾고서 반환되어지는 객체의 형을 알수 있을까? 다시, list 클래스는 모든 STL container와 마찬가지로 제한 해제를 한다.: 그것은 형 정의, iterator, 즉 list내부의 iterator의 정의를 제공한다. charList 가 char의 list가 된 이후로 iterator의 정의는 그러한 list인 list<char>::iterator 내부에 있고, 그것은 위의 예제와 같이 쓰인다. (각 STL container 클래스는 두가지의 iteraotr형인 '''iterator''' 와 '''const_iteraotr''' 를 정의한다. 전자는 일반적인 pointer와 같이 동작하고 후자는 pointer-to-const와 같이 동작한다. )
         다른 STL continer들을 이용해서 정확히 같은 접근을 해본다. 게다가 C++ 포인터는 STL iterator이다. 그래서 원래 배열 예제는 STL find 함수도 역시 이용할수 있다.
         int *firstFive = find(values, values+50, 5); // 맞다. STL find를 호출한다.
         STL, 그것의 중심(core)는 매우 간단하다. 그것은 단지, 대표 세트(set of convention)를(일반화 시켰다는 의미) 덧붙인 클래스와 함수 템플릿의 모음이다. STL collection 클래스는 클래스로 정의되어진 형의 iterator 객체 begin과 end 같은 함수를 제공한다. STL algorithm 함수는 STL collection상의 iterator 객체를 이동시킨다. STL iterator는 포인터와 같이 동작한다. 그것은 정말로 모든 것이 포인터 같다. 큰 상속 관계도 없고 가상 함수도 없고 그러한 것들이 없다. 단지 몇개의 클래스와 함수 템플릿과 이들을 위한 작성된 모든 것이다.
         또 다른 면을 말한다.: STL은 확장성이 있다. 당신은 당신의 collection, algorithms, iterator를 STL에 추가할수 있다. 당신이 STL 협의를 따르는 이상 표준 STL collection은 아마도 당신의 algorithm과 당신의 collection은 STL의 algorithms과 함깨 동작할 것이다. 물론 당신의 템플릿은 표준 C++ 라이브러리의 한부분이 아니다. 그렇지만 그들은 같은 원리로 만들어 질것이고, 재사용 될것이다.
         내가 여기에 기술한 것보다 훨썬 많은 C++ 라이브러리가 존재한다. 당신은 라이브러리를 효과적으로 쓰기 전에, 반드시 당신이 알고 있는 요약 보다 더 많은 것을 배워야 하고, 당신의 STL-compliant 템플릿을 작성하기 전에, 반드시 STL의 협의에 관해서 공부해야 한다. 표준 C++ 라이브러리는 C 라이브러리 보다 훨씬 풍부하다. 아마 당신 자신이 그것(C++lib)에 친숙할수록 시간은 절약 될것이다. 게다가 라이브러리의 디자인 철학은 - 일반화(generality), 확장성(extensibility), 최적화(customizability), 효율성(efficiency), 재사용성(reusability) - 당신이 올바른 배움으로 가는데 매우 도움이 된다. 표준 C++ 라이브러리의 공부로 당신은 당신의 소프트웨어에서 사용 가능한 컴포넌트를 만드는 재반 지식의 향상은 물론, C++ 더 효율적으로 C++의 특징을 적용시키는 방법을 배운다. 그리고 당신은 당신이 가진 라이브러리의 좋은 디자인의 방법에 대한 해안을 얻는다.
Found 1 matching page out of 7544 total pages

You can also click here to search title.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.0087 sec