표준 라이브러리

킴스코딩클럽·2022년 12월 21일
1

CS기초 시리즈

목록 보기
64/71

컨테이너(container)

  • 데이터를 담은 통
  • 일반화 - 템플릿
  • 자료구조

std::string
using string = basic_string<char, char_traits, allocator>;
문자열 - 문자열 가진 배열
STL = 문자를 우너소로 가지는 특수화된 컨테이너

  <string>
    stoi
    to_string
  <sstresm>
    std::ostringstream

컨테이너 예제

벡터(vector)

  • 일반 수학에서는 연속된 n개의 값을 벡터 => 베열과 비슷
  • 원소의 타입을 특수화해서 인스턴스를 만듭니다. - 템플릿을 특수화
    c++11 범위기반반복문(ranged base for loop)
  • for (auto e : v) => 타입이 추측 가능해야한다는 점이 있음

컨테이너 종류

  • 시퀸스 컨테이너(sequence Container)

    std::array = 배열 컨테이너
    std::vector = 동적 배열
    std:: forward_list =single linked list
    std::list =double linked list
    std::deque =양방향 queue

  • 보조 컨테이너(container adapter)

    std::stack
    std::queue
    std::priority_queue

  • 연관 컨테이너(associative container)

    std::set =binar searching tree(single)
    std::map = binar searching tree(key[색인] - value[실제값])

overhead

  • 오버헤드 : 불필요한 비용 발생
  • 순차 접근(sequence access) =
  • 임의 접근(random access) = RAM

컨테이너 사용법

  1. std::array(배열)
  • sequential
  • contiguos(array[3]은 array +3 : 3칸 옮기는 것
  • fixed
  1. std::vector(동적배열) : 새로만들어와서 복사
  • sequential
  • Dynamic : 끝에서 원소를 삭제하고 추가하는 것이 좋음
  1. std::forward_list : 단일 연결 리스트
  • sequential
  • dynamic
  • 삽입/삭제 어디든 상수시간에 끝남
  • 어디든 삽입 삭제해도 문제가 없음
  • 앞에서 삽입 삭제가 가장 빠름
  • 임의 접근이 불가능([])
  1. std::list
  • sequential
  • dynamic
  • 어느 위치든 삽입/ 삭제 상수시간, 앞에서, 뒤에서 삽입/삭제가 빠름
  1. std::deque
  • Sequential
  • dynamic
  • double ended queue
  • 앞 뒤에서만 삽입/삭제가 이뤄짐

그래프 구조

  • 꼭지점들 사이를 선으로 연결한 구조

  • 트리 구조도 그래프 구조의 하위 개념

  • map과 set이 트리 구조를 사용함

    1. std::set <tree자료구조>
      • associate (부모와의 연관성)
      • ordered (자동으로 정렬이 되어 나옴)
      • unique (원소는 중복된 값을 가질 수 없음)
    2. std::map
      • 구조는 set과 같음
      • ket, value로 구조 형성됨 : 사전(dictionary)

자주 사용하게되는 컨테이너

std:: vector
데이터가 적은 경우 (10000개 미만)
뒤에서만 삽입 삭제

std::list
데이터가 많은 경우(10000개 이상)
실제로 약간 느리고 무거움
어쩔수 없을 때 리스트를 쓰기

std::map
데이터가 많은 경우(10000개 이상)
유니크한 키

이터레이터(iterator)

  • 컨테이너의 원소를 순회(traverse)하기 위해서 등장한 개념
  • 포인터를 가진 클래스
  • ++,--,!=,== 연산이 지원됨
  • 시작,끝을 의미하는 begin(),end() 제공
  • 알고리즘(algorithm)

복잡한 구조

  • 컨테이너를 순회하기 위한 포인터 객체
  • 모든 컨테이너는 이터레이터를 (가지고) 있다
  • 자료구조(컨테이너) has a 이터레이터
  • vector 안에 iterator선언이 존재(typedef pointer)

==
정렬, 검사,검색,복사(클로닝)
알고리즘(컨테이너와 분리) : 일반화(어떤 자료형이든 똑같이 사용하도록 분리)
람다식

STL 메뉴얼보고 따라해보기

기타

메모리관리,멀티쓰레씽,멀티프로세싱,예외처리

profile
공부 기록용

0개의 댓글