[데브코스 자율주행 TIL] DAY4 (09/21)

happy_quokka·2023년 9월 21일
0

2023.09.21 데브코스 4일차

시간이 부족하다... 하루가 이렇게 짧게 느껴지는 건 오랜만이다.
전체적으로 c++에는 익숙해지고 있는 것 같다. 이제 뭔지 조금은 알 것 같다. 하지만 암기해야하는 부분들은 암기를 빨리 해야겠다!!

오늘도 c++, STL, 리눅스 vim에 대해 배웠다.
이번주는 이제 내일 하루 남았으니 화이팅하자!!!물론 주말에도 해야겠지만!


📕 C++

컴파일 과정 시점, 런타임 이런게 아직은 조금 헷갈린다. 안다고 생각했었는데 템플릿을 잘못 사용하면 컴파일 오류가 나는데 어디서, 왜 나는건지 바로 캐치하지 못하겠다ㅠㅠ (퀴즈를 풀면서 혼란을 느꼈다...)

C++ 빌드 과정

  • 전처리기 -> 컴파일러 -> 링커
  • include 가드 : 코드가 중복되어 컴파일러가 에러나는 것 방지 위해

템플릿

  • 코드 재사용 극대화
  • 컴파일러는 템플릿 클래스가 인스턴스화 되는 시점에 구현부를 볼 수 있어야 하기 때문에 템플릿 정의가 header 파일에 포함되어야함. (이런 header 파일의 확장자를 hpp로 사용)

📌 STL

비교 알고리즘

  • equal() : 같은지
  • mismatch() : 다른 부분이 어디인지, pair(first, second)가 리턴됨
  • lexicographical_compare() : 서로 다른 형식을 비교하고 싶을 때

변경 알고리즘

  • copy() : 복사
  • move() : 항목이 많은 경우 copy보다 가벼움
  • remove() : 실제 제거x, 제거할 것들을 뒤로 모아줌, 제거될 부분의 시작 iterator 리턴
  • replace_if() : 조건에 대해 대체
  • unique() : 인접 항목에서 중복값 제거
  • reverse() : 항목 앞뒤 반전인데 역방향 반복자가 있어서 잘 사용x

집합 알고리즘

  • set이 아니여도 가능하다(그치만 vector에서 쓰려면 정렬 필요한듯)
  • 코테하면서 유용하게 사용할 수 있을 것 같다
  • includes() : 특정 항목 포함여부
  • set_union() : 합집합
  • set_intersection() : 교집합
  • set_difference() : 차집합
  • set_symmetric_differ() : 대칭 차집합

연관 컨테이너

  • key, value 연관시켜 관리, 내부적으로 정렬(이진 트리) 상태 유지
  • set , map : 중복 x
  • multiset, multimap : 중복값 허용
  • insert, emplace, emplace_hint, find, count, clear 등의 메서드가 있는데 이는 algorithm에 있는 것보다 효율적이다!!

비순차 연관 컨테이너

  • 정렬x, hash 기법(이론적 O(1) BUT! hash 충돌로 인해 복잡도 달라질 수 있음)
  • unordered_set , unordered_multiset, unordered_map, unordered_multimap

📝 리눅스 기초 - vim

  • vim editor를 사용하는 방법을 배우고 있다
  • learning curve 가 암벽등반이다. 배우기 어렵다고 포기하지 않기!!
  • 외워야할 것이 매우 많다ㅠ

📚 과제

정말 다양한 구현 방법이 존재한다는 것을 다시한번 느꼈다

어제 과제 리뷰

  • 값의 overflow 주의하자
  • int는 최대 21억, unsigned int는 최대 42억

완주하지 못한 선수

  • mismatch를 사용했다
  • set_difference로도 할 수 있다

수강신청

  • 이거 어려웠다. type을 unordered_map으로 해야할지 map으로 해야할지 그냥 vector로도 가능한지 이것저것 생각해보고 구현도 쉽지 않았다.
  • key로 정렬할 필요가 없다고 생각하여 unordered_map 선택
  • value값으로 정렬 -> vector<pair<string, int>> 로 map의 값을 옮긴 후 sort할 때 오름차순으로 정렬되도록 람다 또는 함수 정의해서 사용
  • 시간 초과!!!!! endl를 사용하면 시간초과가 난다. 이걸 찾아내는 과정이 오래걸렸다....
  • endl의 경우 실행바다 내부 버퍼를 지우는 역할도 해서 시간이 오래걸린다고 한다. endl 대신 '\n'을 사용하자!!!

0개의 댓글