728x90

stl 4

C++ STL list의 기본적인 사용법 정리

C++로 알고리즘 문제를 풀다 보면 STL을 자주 사용한다. 다양한 방식으로 자료를 다루는 스택, 큐, 링크드 리스트 등을 직접 구현하지 않아도 최적화된 환경에서 잘 이용해먹을 수 있게 해주는 도구로, 이번 포스트에서는 STL에서 list에 대해 간단하게 다뤄볼까 한다. 사실, 다룬다는 개념보다는 정리한다는 측면이 더 강할 것이다. list는 순차적인 컨테이너로, 메모리 할당은 연속적으로 이루어지지 않는다. vector와 비교했을 때, 랜덤 접근이나 탐색 측면에서는 vector가 더 좋은 성능을 보이지만, 특정 위치를 정해둔 상태에서 삽입이나 삭제가 이루어질 경우에는 vector에 비해 빠르다는 장점을 가지고 있다. 종합적으로 볼 때, list는 중간 데이터 삭제와 삽입이 자주 발생하면서, 순차적으로 저..

C++] STL(Standard Template Library)이 무엇인가?

STL(Standard Template, Library;표준 템플릿 라이브러리)은 일반적인 대학생들은 접할 일이 거의 없다. 대학의 C++ 강의에서는 가르칠 수 없는 환경일 수밖에 없는 것이, C를 첫 프로그래밍 언어로 배우면서 반복문에서, 포인터에서 멘탈이 터지면서 흥미를 날린 상태로 어거지로 C++을 배우기 때문이라고 생각한다. 대학에서 사용하는 C++ 교재에서는 기본적으로 템플릿과 STL을 부록 형식으로라도 다루기 때문에 충분히 정보를 제공하고 있지만, C++에서 OOP(Object-Oriented Programming;객체 지향 프로그래밍) 개념을 다루는 것에만 초점을 두고 강의를 진행하는 경우가 많기 때문에 쳐다볼 일도 거의 없다. 덕분에(?) 대부분의 대학생들은 템플릿과 더불어 STL이라는 용..

[C++] STL을 사용해 간편하게 알고리즘 문제 풀기

알고리즘 문제를 풀다 보면, 어떤 경우에는 데이터 처리에 앞서 정렬을 해야 하는 경우가 있다.그럴 때마다 정렬소스를 짜는 것이 비효율적일 뿐더러 정렬 이후 데이터 처리에 신경을 써줘야할 때문제의 시간복잡도를 고려해 퀵 정렬 등을 짜고 있는 건 생산적이지 못하다고 느꼈다.정렬에 대해 자세히 아는 건 좋지만, 그걸 실용적으로 활용하는 것도 중요하다는 이야기다. C언어를 주로 썼을 때는, qsort를 사용했다.(이부분에 대해서는 다른 포스팅에서 소개하겠다.) C++에서는 sort를 사용하면 빠른 시간 내에 정렬된 결과를 받을 수 있다.성능 측면에서는 다른 함수에 비해서는 준수한 수준이다. 이 성능에 대한 진 단순히 퀵 정렬만으로 구성한 정렬이 아니라 복합적으로 힙정렬, 삽입정렬도 섞여 있기 때문이다. 아래 사..

C++] vector를 구조체 내 변수 기준으로 정렬하기

C++로 알고리즘 문제를 풀거나 이런 저런 이유로 코딩을 하다 보면 vector를 사용하게 되고 이 vector 내에 들어가는 값들을 정렬하기 위해서 직접 정렬을 구현해주는 방법도 있지만 좀 더 최적화되어 빠른 속도로 정렬을 수행해주는 sort함수를 사용하게 된다. 요소의 상대적 위치가 바뀌지 않는 걸 원한다면, stable_sort를 사용하면 된다. 통상적으로 자료형이 하나(예를 들어 int 하나)만 들어가는 vector라면, 시작점과 끝만 정해주면 알아서 오름차순 정렬을 수행해버리기 때문에 문제가 되지 않지만, vector 배열에 들어가는 정보가 여러 가지 자료형이 섞여 있는 구조체이고 그 구조체 안의 변수를 기준으로 정렬을 수행해야 한다면, 갑자기 머리가 아파온다. 대부분 레퍼런스를 참고하지 않거나..

728x90