C++은 처음 처음 개발된 이후로 참 많은 사람들에 의해서 개발 보완되어왔고, 자바와 같은 강력한 언어의 추격속에서도 아직도 많이 이용하는 언어이다. 자바의 강력함은 기본 제공되는 라이브러리들의 강력함에 있다고 할 수 있다. 데이터를 다루는 컨테이너와 소팅, 검색과 같은 기본적인 기능이 매우 우수하기 때문이라고도 할 수 있다.

 그럼 이런 상황에서 우리 C++ 고수들이 가만히 있기야 했으랴! 당연히 이런 자바의 우수함에 비견될만한 강력한 라이브러리를 등장시켰으니 이것이 바로 STL(Standard Template Library)라고 할 수 있다. 처음 등장은 SGI에서 개발해 등장했으나 그 유용함으로 결국 C++의 표준 라이브러리로 올라온 엄청난 녀석이다.

#include <algorithm>
#include <vector>
#include <string>

bool case_eq(char *c1,  char *c2) 
{
if (strcmp(c1, c2) < 0)
return 1;
else
return 0;
}
int main()
{
vector<int> V;
V.push_back(4);
V.push_back(7);
V.push_back(2);
V.push_back(3);
V.push_back(1);
V.push_back(6);

sort(V.begin(), V.end());
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));

vector<char *> V2;
V2.push_back("my name");
V2.push_back("hello");
V2.push_back("ma name");
V2.push_back("hael");

sort(V2.begin(), V2.end(), case_eq);
copy(V2.begin(), V2.end(), ostream_iterator<char *>(cout, "\n"));
}
 자바만큼 단순하지는 않지만 자바의 70%정도는 간결한 소스로 소팅을 작성할 수 있다. 여기에 더해서 자바에서는 하기 힘든 함수 포인터를 이용한 소팅의 자율성까지 갖춘 대단함이 있다.

 이 녀석을 배우기에 가장 좋은 방법은 자바에서 String 클래스를 배우듯 std::string 클래스를 바로 익히는 식으로 공부하는 것이 가장 좋은 것 같다. 보통의 C++ 교재가 접근하는 bottom-up 방식의 접근이 아니라 top-down 방식의 접근이 필요하다는 말이다. 실제로 Accelerated C++은 이런식의 접근으로 C++을 접근하고, 배울 수 있다는 것을 보여준 좋은 예라고 할 수 있다.

Accelerated C++(예제로 배우는 진짜배기 C++ 프로그래밍) 상세보기
Andrew Koenig, Barbara E. Moo 지음 | 정보문화사 펴냄
C++ 활용서. 이 책은 기본 프로그래밍, 설계 기법, 활용 라이브러리, 프로그래밍 지침 및 테크닉을 모두 포괄한 것으로 프로그래밍 언어적 기능만을 설명하는 것이 아니라 실질적인 문제와 그 해결책에 대해 설명하고 있다. 또한 각각의 기능에 대한 표면적인 설명뿐만 아니라, 그 기능들을 어떻게 사용하는 지를 자세히 알려주고 있다.

 처음 이 책을 보면서 내용을 정리했던 내용이 ZP 위키에 있었는데... 현재는 위키 서버가 날아가면서 그때의 자료를 날려서 결과적으로 아무것도 가진게 없다. -_-;; 결국 책을 보라는 말이다. ㅎㅎ 주의할 것은 STL 을 직접 사용해서 배열을 알려주는 관계로 template 에 관련된 문법을 처음부터 사용하는데 큰 의미를 두지말고 그냥 그대로 이해하고 받아들이는 자세가 필요할 것 같다. 괜히 이건 어떻게 만들어진거지 하면서 STL을 뜯기 시작하면 정말 이 책 보기힘들다고 생각한다.

 참고로 보면서 이 STL이라는 것을 접해볼 생각이라면 아래의 사이트로 가보자.
 http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/STL
크리에이티브 커먼즈 라이선스
Creative Commons License
C++, stl

설정

트랙백

댓글

일단 dynamic cast를 사용하기 위해서는 setting이 필요하다.

  Project Settings(Alt + F7)에서 C/C++ 탭에서 Category → C++ Language를 누르고 Enable Run-Time Type Information(RTTI)를 체크하자.

  그런 다음 dynamic cast를 사용하면 된다.

----------------------------------------------------------------------------------------

#include <iostream>

using namespace std;

enum TYPE {HORSE, PEGASUSE};


class Horse
{
private :
   int itsAge;
public :
   virtual void Gallop() {cout << "Galloping..." << endl;}
};


class Pegasus : public Horse
{
public :
   virtual void Fly() {cout << "Fly! Fly!" << endl;}
};


const int NumberHorses = 5;


int main()
{
   Horse * Ranch[NumberHorses];
   Horse * pHorse;


   int choice;


   for(int i = 0; i < NumberHorses; i++)
  {
        cout << "(1)Horse (2)Pegasus : ";
        cin >> choice;


        if(choice == 2)
              pHorse = new Pegasus;

       else
              pHorse = new Horse;


       Ranch[i] = pHorse;
   }


   cout << endl;


   for(i = 0; i < NumberHorses; i++)

   {
       Pegasus * pPeg = dynamic_cast<Pegasus *> (Ranch[i]);

/*        

  컴파일 하는 동안에 Ranch[i]가 가르키는 객체가 Pegasus라면 pPeg가 Ranch[i]가 될 것이고 그렇지 않으면 pPeg가 NULL이 될 것이다.

*/

      if(pPeg)
            pPeg->Fly();
      else
            cout << "Just a horse" << endl;


      delete Ranch[i];
  }

   return 0;
}
크리에이티브 커먼즈 라이선스
Creative Commons License

설정

트랙백

댓글