cpp 08

jiwoo·2022년 12월 22일
0

cpp

목록 보기
9/9

CPP 08

생성일: 2022년 12월 14일 오후 11:13
최종 편집 일시: 2022년 12월 22일 오후 3:50
cpp notion

CPP MODULE 08

STL 사용하기

#include , templated container, iter .. extra..


ex00 Easy find

  • template 의존타입 dependent type

    • 의존 이름
      • 템플릿 매개변수인 C에 따라 달라지는 타입. 템플릿 매개변수에 종속된 것을 의존 이름이라 한다.
      • 템플릿 내의 이름 중에 이렇게 템플릿 매개변수에 종속된 것을 가리켜 의존 이름(dependent name)
    • 중첩의존타입이름
      • 템플릿 안의 지역변수 타입이 템플릿 매개변수에 종속된 의존 이름일 때, 다른 클래스 안에 이름이 중첩되어 있는 경우
      • 이때 C++는 모호성을 해결하기 위해 규칙 하나를 사용하는데, 템플릿 안에서 중첩 의존 타입 이름을 만나면 개발자가 타입이라고 알려주지 않는 한, 타입이 아니라고 가정한다
      • typename 키워드는 중첩 의존 타입 이름만 식별하는데 써야 한다.
      • 기본 클래스(상속받는)의 리스트에 있거나, 멤버 초기화 리스트 내의 기본클래스 식별자(생성자를 말하는것이 맞나)로 있을 경우에는 사용되면 안된다.
        template <class C> // typename
        typename C::iterator easyfind( C &container, int const value ){
        	
        	C::iterator* iter;
        	// 타입이 아니라고 가정하여 값으로 생각한다. ? 
        	// C에 iterator 데이터 멤버가 있다면 값 *(곱셈) iter; 의 연산이 될 수 있다.
        }
        
        template <class C> // typename
        typename C::iterator easyfind( C &container, int const value ){
        	
        	typename C::iterator *iter;
        	// typename C::iterator iter;
        	// 중첩 의존 타입의 모호성을 없애고 'typename'을 붙여 타입이라는 것을 알려주었다.
        	// 이 경우 '*' 는 포인터로 읽힐 것이다.
        }
        
    • 비의존 이름
      • int 템플릿 매개변수가 무엇이되든 상관 없는 타입
    • https://mindole94.tistory.com/265
    • https://sungbeom.github.io/2019/12/30/EffectiveCpp7-2.html
  • 컨테이너 활용 및 사용시 주의사항

  • 순차 컨테이너 Sequence Containers

    • array, vector, deque, forward_list, list
    • 순차 컨테이너 중 std::array<T,N>std::vector<T>std::deque<T>는 선형구조로 되어있다. C++11부터 추가된 std::forward_list<T>는 단일 연결 리스트(single linked list)이며 std::list<T>는 이중 연결 리스트(double linked list)이다. 리스트도 operator[] 를 지원하지만 선형구조의 무작위 접근(random access) 방식과는 다르고 성능이 좋지 않다.
    • https://wikidocs.net/117602
  • 연관 컨테이너 Associative Containers

    • set, map, multisite, multimap
    • 연관 컨테이너의 특징은 정해진 정렬 기준으로 자료 입력과 동시에 모든 자료가 정렬된다.
    • https://wikidocs.net/117601
  • 비정렬 연관 컨테이너 Unordered Associative Containers

    • std::hash, unordered_set, unordered_multiset, unordered_map, unordered_multimap
    • 연관 컨테이너는 자료 하나 입력 될 때마다 정렬하기 때문에 정렬할 필요 없는 대용량 데이터일 경우 비효율적이다. 비정렬 연관 컨테이너는 이름에서 알 수 있듯 자료가 입력 삭제 되어도 정렬되지 않는다. 비정렬 연관 컨테이너는 해시 키(hash key)를 사용하는 컨테이너이다. 일반적으로 해시 테이블(hash table)
      이라고 한다.
  • 컨테이너 어댑터 Container Adapters

    • stack, queue, priority_queue
    • 컨테이너 어댑터는 std::deque<T>로 구현된 std::stack<T>std::queue<T>와 std::vector<T>로 힙 자료구조를 사용할 수 있게 만든 std::priority_queue<T>가 있다.
  • 이터레이터 Iterator

    • 컨테이너의 포인터 역할

**ex01 Span**

  • 최대 n개의 integer을 담을 수 있는 class를 만들어라

  • std::sort

    • 퀵 소트를 기반으로
    • **T(n) = O(nlog₂n), T(n) = O(n^2)**
  • 멤버함수

    void	addNumber( int value );
    // 템플릿으로 변경해야함
    //void	addRange( std::vector<int>::iterator begin, std::vector<int>::iterator end );
    int		shortestSpan( void ); 
    int		longestSpan( void ) const;

ex02 Mutated abomination

not iterablestd::stackiterable 하도록 MutantStack 클래스를 만들어 보자.

0개의 댓글