Search Results for 'C++/STL'

5 POSTS

  1. 2012.08.13 iterateor
  2. 2012.08.13 STL 동적 할당 해제
  3. 2012.08.13 containers
  4. 2012.08.13 algorithm
  5. 2012.08.13 STL 이란 ?

iterateor

Posted 2012. 8. 13. 22:21

컨테이너 내부의 요소를 순회(traversing)하는 방법을 캡슐화한 객체. 현재 가리키는 요소를 반환하는 *연산자->연산자 를 가지고 있으며 그 외의 연산자는 반복자의 종류에 따라 다름.(iterator, reverse_iterator, const_iterator, const_reverse_iterator). 반복자는 클래스 템플릿이며 컨테이너마다 특화되어 있는 자료구조를 선형적으로 다룰수 있게 해준다.

(무효화 : 반복자가 가리키는 원소에 대한 참조가 정산적인 동작을 보장할 수 없게 되는경우)

 

반복자는 컨테이너의 특정 위치를 가르키고있음. Pointer와 같이 연산자를 사용할 수 있음(연산자 오버로드 되어있음)

operator* : 현재

operator ++ : 다음

operator -- : dlwjs

operator !=, == : 같은지 아닌지

operator = : 반복자를 할당

 

pointer와 다른것이 없어보이지만 iterater는 복잡한 컨테이너를 순회할수 있는 스마트 포인터임.

 

반복자는 후위연산보단 전위연산이 성능이 좋음(후위는 반복자의 이전값을 반환하기 때문에 임시로 객체가 생김)

 

con::iterator            : 원소들을 읽기/쓰기 가능

con::const_iterator   : 읽기 전용(const)

'C++ > STL' 카테고리의 다른 글

STL 동적 할당 해제  (0) 2012.08.13
containers  (0) 2012.08.13
algorithm  (0) 2012.08.13
STL 이란 ?  (0) 2012.08.13

STL 동적 할당 해제

Posted 2012. 8. 13. 22:19

STL은 해당 객체만 비운다.

 

동적할당은 따로 해줘야됨

 

---- vector 와 list 는 아래와 동일 ----

void Input()

{

for(iter = iter+Data.begin() ; iter != Data.end() ; )

{

Person* pTmp = new Person;      //동적할당

cout<<"이름: ";

cin>>pTmp->Name;

.......

Data.push_back(pTmp);

}

}

 

---- 해제 ㄱㄱ ----

void ClearData()

{

for(iter = iter+Data.begin() ; iter != Data.end() ; )

{

delete (*iter);      //동적 해제

}

Data.clear();            //객체 비움

}

 

 ---- map은 구성에따라 first와 second를 해제 ----

 second에 동적할당을 받았을시에..

delete (*iter).second;

'C++ > STL' 카테고리의 다른 글

iterateor  (0) 2012.08.13
containers  (0) 2012.08.13
algorithm  (0) 2012.08.13
STL 이란 ?  (0) 2012.08.13

containers

Posted 2012. 8. 13. 22:14

자료의 집합을 나타내는 클래스 템플릿. 단위 작업에 필요한 시간복잡도에 의해 구분된다.

다른 타입의 데이터를 저장할 수 있게 쉽게 커스터마이징(이용자가 사용방법과 기호에 맞춰 설정하거나 기능을 변경)할 수 있다.

 

알고리즘의 동작을 결정하는 객체. 함수호출 연산자( ()연산자 ) 를 적용할 수 있는 모든 대상이 함수자가 될 수 있다. 일반함수, 혹은 ()연산자를 오버로딩한 클래스의 객체들이 해당된다. greater<>, less<>등등 여러 알고리즘에서 유용하게 사용할 수 있는 템플릿이다.

 

STL :  7가지 basic type이 사용가능할 뿐만 아니라 basic type에서 상속된 3가지 타입이 더 있다그리고 basic type에서 상속 받는 자신만의 콘테이너를 만들수도 있다 

메인 카테고리 : sequence  ,  associative

sequence : vector, list, deque

associative : set, multiset, map, multimap

 

sequence containers

line으로 시각화 할수 있는 요소들의 집합을 저장. 각 요소들은 선을 따라서 다른 요소들과 연결되어 있다.

끝요소를 제외한 각 요소들은 어떤 요소들의 앞에 있을 수 있고 뒤에 있을 수 있다.

 

 associative

키를 이용하여 데이터를 엑세스. 사전과 비슷한 개념. 키오브젝트가 인덱스 역할을 하고 value오브젝트가 인덱스가 가리키는 값이 됨

 

각 컨테이너들을 include

#include <vector>

#include <list>

#include ........................

 

Member Function

size()

empty()

max_size()

begin()

end()

rbegin()

rend()

'C++ > STL' 카테고리의 다른 글

iterateor  (0) 2012.08.13
STL 동적 할당 해제  (0) 2012.08.13
algorithm  (0) 2012.08.13
STL 이란 ?  (0) 2012.08.13

algorithm

Posted 2012. 8. 13. 22:13

container가  가진 데이터를 다양한 방법으로 처리하는 프로시져다

그렇지만 container의 멤버함수는 아니고 템플릿 함수들이다.

 #include <algorithm> 

  1. find(시작주소, 끝주소, 찾을값)

    ->주어진 원소와 같은것으로 판단되는 원소를 검색하는 선형 검색 알고리즘. 기본적으로 == 연산자를 사용

    ->동일한 최초의 값을 리턴

    ex) int arr[5] = {1, 2, 3, 4, 5};

    int* k = find(arr, arr+5, 3);

    cout<<(*k)<<endl;  => 3

    -> 반환값 : 찾는 값의 주소

  2. sort(시작, 끝)

    -> 정렬 알고리즘(지정한 순서로 정렬)

    ex) int arr[5] = {1, 5, 2, 3, 4};

    sort(arr, arr+5);  //1,2,3,4,5 순으로 정렬

  3. make_heap()

    -> 어떤 구간[S,E)를 힙으로 만든다

  4.  count(시작주소, 끝주소, 찾을값)

    -> 엘리먼트의 갯수를 리턴

    -> 반환값 : 찾는 값의 갯수 (갯수만큼 count가 ++됨)

  5.  search(B의시작주소, B의 끝주소, A의시작주소, A의 끝주소)

    -> 어떤 한 container(A)의 연속적은 패턴(값들)을 다른 한 container(B)에서 찾아본다

    -> 반환값 : 최초에 발견된 값들의 B의 시작주소

  6.  equal()

    -> 두 콘테이너의 데이터가 완전히 같으면 true를 리턴

  7.  copy()

    -> 시퀀스 값을 복사

  8. swap()

    -> 값을 서로 바꾼다.

  9. iter_swap()

    -> 시퀀스 값을 서로 바꾼다

  10. fill()

    -> 시퀀스의 특정 위치에 값을 채운다.

  11. max()

    -> 주어진 입력중에서 가장 큰 값을 구한다. 기본 자료형 이외에도 연산자를 오버로딩한 클래스나 구조체를 입력으로 받을 수 있다.

  12. min()

    -> max()와 같지만 최소값을 반환한다

  13. insert()

    -> if( (*iter) == 3)                  //iter가 3과 같으면

    (*iter).insert(iter, 100);    //그 앞에 100을 넣어라.

  14. iter_swap()

    -> 시퀀스 값을 서로 바꾼다.

  15.  merge(src1의 시작주소, src1의 끝주소, src2의 시작주소, src2의 끝주소, dest의 시작주소)

    -> 두개의 저장소를 결합한다.

  16.  accumulate()

    -> 주어진 범위의 값을 더한다.

  17.  for_each(시작, 끝, 각각의element를 함수로 넘겨줌)

    ->각 콘테이너의 엘리먼트 값을 탐색

    ex) void AddNum(int num)

    {

    cout << (num+10) << endl;

    }

    void main()

    {

    int arr[5] = {1, 2, 3, 4, 5};

    for_each(arr, arr+5, AddNum);

    }

    -> +10씩 더해진 값이 나옴

'C++ > STL' 카테고리의 다른 글

iterateor  (0) 2012.08.13
STL 동적 할당 해제  (0) 2012.08.13
containers  (0) 2012.08.13
STL 이란 ?  (0) 2012.08.13

STL 이란 ?

Posted 2012. 8. 13. 22:11

STL :: Standard Template Library

STL :: 표준        템플릿     라이브러리

 

장 점

  1. 자료의 유형(객체 지향 기법과 일반화 프로그래밍 기법)에 상관없이 구현되어 있기 때문에 포괄적이다.

  2. 테스트를 거친 검증된 라이브러리라 버그가없고 개발 기간을 단축할 수 있다.

 

단 점

  1. 디버깅이 힘들다. STL의 근원이 되는 템플릿은 효과적인 디버깅과 정지점 설정이 어렵다.

  2. 메모리 할당이 비효율적이다. 누수같은 버그는 없지만 메모리 단편화 현상을 유발시킨다. 하지만 메모리 단편화 문제는 사용자정의 할당자를 만들어 피할수 있다.

 

 구 성

  1. containers(자료구조)

  2. iterator(반복자)

  3. algorithm(알고리즘)

  4. functional(함수자)

'C++ > STL' 카테고리의 다른 글

iterateor  (0) 2012.08.13
STL 동적 할당 해제  (0) 2012.08.13
containers  (0) 2012.08.13
algorithm  (0) 2012.08.13