목록STL (9)
승쨩개발공부
std::vector push_back 멤버 함수 push_back은 vector의 끝에 요소를 추가할떄 사용하는 함수 std:vector emplace_back C+11 부터 추가된 멤버함수 push_back과 같이 vector의 요소 끝에 원소를 추가하는 함수. push_back/emplace_back 차이점 두 함수의 가장 큰 차이점은, push_back과 같은 삽입 함수들은 삽입할 객체를 받지만 emplace_back과 같은 생성 삽입 함수는 삽입할 객체의 생성자를 위한 인자들을 받아 std::vetor 내에서 직접 객체를 생성하여 삽입하므로 임시 객체의 생성과 파괴, 복사를 하지 않아도 되서 성능상 더 유리하다.
map -> map의 원소는 key와 value를 한 쌍으로 가진다. -> 각 원소들은 삽입 시에 key값에 따라 자동 정렬이 발생한다.(순회 가능) -> 노드 기반 컨테이너들 중 유일하게 key값을 통한 임의 접근이 가능하다. -> 리소스 탐색용으로 많이 사용된다. -> 단, 중복된 key값은 허용하지 않는다. map 선언 map 사용 -> map은 key와 value를 한 쌍으로 가진 컨테이너이다. -> key로 사용할 자료형과 value로 사용할 자료형을 안에 명시해주면 된다. -> 명시한 순서대로 key와 value의 타입이 결정된다. map의 원소 삽입 map은 원소 삽입 시 key 값에 따라 자동 정렬이 발생한다. -> 자동 정렬이 발생하기 떄문에 앞,뒤 원소 삽입의 의미가 없으므로 push ..
list -> 노드를 기반으로 하는 컨테이너 이다 -> 배열 기반 컨테이너가 아니기떄문에 인덱스 접근이 불가능하다. -> 더블 링크드 리스트로 구현되어 있다. -> 앞,뒤 노드의 삽입 및 삭제가 가능하다 각 노드는 연속적인 메모리를 사용하는 것이 아니고, 비 연속적인 메모리에 여기저기 저장되지만 포인터로 각 노드를 연결하여 마치 연속된 메모리를 사용하는 것처럼 보인다. -> 임의 접근이 불가능 -> 탐색하고자하는 원소가 나올 떄까지 모든 노드를 순회해야함 -> 선형시간 O(n) 삽입 삭제 시에는 단순 포인터의 해제 및 연결만 하기 떄문에 메모리를 밀고 당길 필요가 없어 빠르다.(상수 시간 O(1)) 메모리의 재할당 및 복사가 필요 없기 떄문에 런타임 시에도 삽입 삭제가 용이하다. list의 사용 list..
vector의 메모리 정책 -> vector는 메모리 개수를 초과하는 삽입의 시도가 있을 경우 재할당 및 복사가 발생한다. -> 재할당은 (기존 메모리 개수 / 2) 만큼 추가로 할당이 된다. -> 재할당 및 복사를 최소화 하기 위해 사용할 만큼 메모리를 예약하여 사용하는 것이 좋다. #1. 생성자 -> 메모리 개수를 생성자의 인자만큼 만들어준다. -> 단, 원소도 모두 채워 넣는다 -> 사용하기 위해서는 clear 이후 push_back을 사용하는 방법과 -> 인덱스 접근을 통한 대입을 이용하면 된다. #2. reserve -> 객체 생성 후 멤버 함수를 호출하면 된다. = 결과값은 위와 같다
조건자 -> 알고리즘 함수의 인자로 적용된다. -> 오름차순 또는 내림차순, 탐색 기준 등 조건을 설정한다. -> bool타입의 값을 반환하는 함수 포인터, 함수 객체를 사용한다. 조건자 만들기 조건자를 통해서 정렬을 시도하려면 알고리즘 함수가 필요하다. 알고리즘 함수를 사용하기 위해서는 #include 추가가 필요하다. 알고리즘 함수 ##1. _Sort(#1, #2, #3) -> 배열 기반 컨테이너에서만 작동한다. #1 : 시작 위치를 가리키는 것. (반복자, 포인터) == (begin) #2 : 마지막 원소 다음 위치를 가리키는 것. (반복자, 포인터) == (end) #3 : 조건자. == (조건자 함수) 그런데 C++에서는 조건자를 제공하는 _functional이라는 파일이 존재한다. -> 단, ..
반복자 -> 객체이다. -> 포인터의 사용 방법을 토대로 연산자 오버로딩하여 구현 객체. -> 컨테이너마다 데이터의 저장 방식이 다르기 떄문에 순회하는 방법 또한 달라진다. -> 이러한 방법들을 획일화하기 위해 반복자를 만들어 놓았다. -> 반복자는 컨테이너의 원소를 가리키는 것. 반복자 선언 -> 각 컨테이너 내부에 구현되어 있다. -> 스코프 연산자를 통해서 접근한다. front와 back front : vector의 첫 번쨰 원소에 접근 back : vector의 마지막 원소에 접근 반복자 초기화 -> 컨테이너가 반복자를 반환하게 하면 된다. 반복자를 초기화하기 위해 대입을 시도하게 되는데, 여기서 대입 연산자 기준 좌측은 객체이기 떄문에 객체 타입을 통해서 초기화를 진행해야 한다. vector.f..