C++
This presentation is the property of its rightful owner.
Sponsored Links
1 / 17

C++ 프로그래밍의 이해 PowerPoint PPT Presentation


  • 146 Views
  • Uploaded on
  • Presentation posted in: General

C++ 프로그래밍의 이해. Standard Template Library 김호권 [email protected] C ompiler and A dvanced C omputer S ystems L ab K orea U niversity, Seoul, Korea. Schedule. Index. Template Container STL. Template.

Download Presentation

C++ 프로그래밍의 이해

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


C

C++ 프로그래밍의 이해

Standard Template Library

김호권 [email protected]

Compiler and Advanced Computer Systems Lab

Korea University, Seoul, Korea


Schedule

Schedule


Index

Index

  • Template

  • Container

  • STL


Template

Template

  • data type만 다른 overloaded 함수에 대해서 각각을 구현하기 보다는 어떤 방법으로 간단하게 할 수 없을까?  template

  • 다양한 변수형(type) 에 적응적인 코딩이 가능하게 하는 문법이다.  generic

  • template < type _typename >


Template1

Template

  • min() 예제

#include <iostream>

using std::cout;

using std::endl;

template <class Type>

Type min( Type a, Type b )

{

return a < b ? a : b;

}

int main()

{

int a, b;

a =3;

b =5;

cout << "min : " << min(a,b) << endl;

return 0;

}


Template2

float Min_float( float a, float b )

{ return (a<b?a:b); }

Template < type _T >

_T Min( _T a, _T b )

{ return (a<b?a:b); }

Int Min_int( int a, int b )

{ return (a<b?a:b); }

cUser Min_float( cUser a, cUser b )

{ return (a<b?a:b); }

Min < float > ( a, b );

Min < int > ( a, b );

Min < cUser > ( a, b );

Template


C

STL

  • STL (Standard Template Library) 이란, 1997년 C++ 표준안이 확정될 때에 함께 배포된 표준 라이브러리(Standard Library) 의 일부분을 지칭하는 용어이다.

  • 단순한 표준화된 클래스 라이브러리가 아니라 모든 것이 Template으로 구성된 라이브러리.


Why stl

Why STL?

  • 전용의 함수 혹은 전용의 자료구조가 아닌 일반적으로 사용 가능한 함수 혹은 자료구조를 만들기 위해서이며, 이러한 일반적인 자료구조에 일반적인 알고리즘을 적용시키기 위해서 이다.

  • 간단히 말해서, 프로그래밍 시간을 극적으로 단축시키고 코드 수를 줄이고 유지보수 쉽고 확장 쉬운 코드를 만들기 위해서이다


Stl advantage

STL Advantage

  • 장점으로는 우선 소스크기의 축소를 들 수 있다. 이미 STL에는 자주 사용되는 50여개 정도의 알고리즘과 다양한 데이타 구조들을 가지고 있다. 우리는 이러한 STL에서 사용하는 자료구조와 알고리즘을 이용해서 소스코드의 크기를 획기적으로 줄일 수 있다.

  • STL 알고리즘과 컨테이너들은 기존의 C/C++ 의 포인터와 배열에도 사용할 수 있으며, 변환 가능하므로 유연하게 사용 가능하다. 그리고 컨테이너와 알고리즘이 서로 분리되어 있음으로(많은 경우), 자신이 알고리즘을 만들어서 컨테이너에 적용시키는 작업이 가능하다.

  • 대부분의 알고리즘과 자료구조들은 충분히 테스트되고 최적화 되어 있다. 또한 효율적인 프로그래밍을 위한 다양한 접근 방법을 제공하므로, C++ 을 사용한 STL 이 느릴 것 이라는 예상을 깨고 약간만 신경을 쓴다면 매우 효율적인 코드를 생성할 수 있다.


Stl disadvantage

STL Disadvantage

  • 우선 디버깅이 어렵다. STL을 잘못사용할경우 발생되는 컴파일시의 에러코드는 template에 있는 내부함수들의 에러들을 출력시킨다. 이러한 에러가 발생하면 일단 에러메시지의 양들도 많을 뿐더러, 이해자체가 어려운 메시지들이다. 이걸 해결하는 방법은 하나뿐이다. STL 에 익숙해지기..

  • STL이 유연성을 구현하기 위한 template의 경우 프로그램의 크기를 매우 크게 만들수 있다. 아직은 컴파일러가 template을 그리 효율적으로 처리하지 못하기 때문이다. 역시 비용을 잘 고려하여서 효율적으로 STL의 알고리즘과 컨테이너들을 사용해야 한다.

  • 반복자와 컨테이너가 분리되어서 존재한다. 이는 쓰레드 프로그래밍시 문제를 발생할 소지를 가지고있다.


C

STL

  • STL 은 다음의 요소로 구성된다.

    • Container (컨테이너)

    • Iterator (반복자)

    • adaptor (접속자)

  • 대표적인 Container

    • Vector / List / Deque / Map / string

    • *** Tree 는 제공되지 않는다.


Stl container

STL Container

  • STL 을 설명하면서 등장하는 컨테이너(저장소)란 객체를 원소로 저장할수 있는 영역을 말한다. 이는 특정 데이타 타입만을 저장할 수 있는 배열과는 상당히 다른 개념이다. 객체란 묘사될 수 있는 모든 사물을 말한다. 이러한 객체를 원소로 저장할 수 있다는 특성 때문에 컨테이너는 모든 종류의 데이터 저장이 가능하도록 되어있다. 이러한 특성은 앞에서 언급했듯이 C++ Template 을 이용해서 구현된다.(더 자세히 말하자면 Class Template).

  • STL 은 다양한 자료구조로 사용될 수 있는 약 10가지 정도의 컨테이너들을 제공한다. 여기에는 배열을 일반화 시킨 vector, queue 로 사용 가능한 deque, 요소를 가르키는 첨자로 int 형 대신에 다른 형(char * 이나 string)을 사용할 수 있는 map 등이 있으며, 이러한 다양한 컨테이너들을 사용하여서 쉽게 확장 가능한 자료구조를 단 몇 줄의 코딩으로 쉽게 구현할 수 있다.

  • 이러한 10가지 정도 되는 컨테이너들은 다시 Sequence 컨테이너와, Association 컨테이너로 크게 나눌 수 있다.


Stl example 1 string

STL example 1 - string

string s1 = “김호권”;

string s2 = s1;

printf( “%s”, s2.c_str() );// 김호권

string s1 = “mark korea”;

reverse( s1.begin(), s1.end() );// aerok kram

Printf( “%c”, s1.at(0) );// m


Stl example 2 vector

STL example 2 - vector

vector< int > nums;nums.insert( nums.begin(), -999 );// -999nums.insert( nums.begin(), 14 );// 14 -999nums.insert( nums.end(), 57 );// 14 -999 57

for ( int i = 0; i < nums.size(); i++ )

cout << nums [ i ] << endl;// 14 -999 57

nums.erase( nums.begin() );// -999 57nums.erase( nums.begin() );// 57

nums

[0]

[1]

[2]

[3]

14

-999

57


Stl example 3 list

STL example 3 - list

list< string > names;names.insert( names.begin(),“Eric" );// Eric

names.insert( names.end(),“Samsik" );// Eric Samsiknames.insert( names.begin(),“Daniel" );// Eric Samsik Danielcout << *(names.begin()) << endl;// Ericnames.reverse();// Daniel Samsik Eric

names

Eric

Samsik

Daniel


Stl example 4 map

STL example 4 - map

map < string, int >m;m[ "zero" ] = 0;m[ "one" ] = 1;m[ "phone of Samsik" ] = 12345;cout << m[ “one” ] << endl

<< m[ "phone of Samsik" ] << endl;// 112345

Hash Table

0

m

1

12345


C

Q&A

  • Q&A


  • Login