백준 문제풀이 하면서 STL을 다양하게 사용해보고 있는데 헷갈려서 정리한다
목차
vector 의 특징
vector 는 동적 배열 구조로 여러 가지 자료형으로 정의하여 사용 할 수 있다.
vector 는 데이터를 선형적으로 만들려고 하며 저장 공간을 초과하는 데이터를 추가 하는 경우 현재 보유하고 있는
메모리의 두 배 만큼을 할당. (메모리의 사용량이 증가하고 속도가 느려질수있음)
또한 배열의 크기가 빈번하게 변경될때도 성능이 저하될수 있다.
vector 의 검색 시 시간 복잡도는 O(n) 으로, 검색이 빈번한 경우 성능을 고려하면 map등 다른 자료구조가 효율적이
vector 기본 사용법
생성
고정 길이로 선언할시 미리 뒤에 vector 의 크기를 정의한다.
// 고정 크기
// 변수도 사용 가능
vector<int> vec(n);
// 가변 크기
vector<int> vec;
선언 시 초기화
// 배열의 개수, 초기 값
vector<int> vec(10,0);
* int 의 경우 기본적으로 0으로 초기화되어 있다.
요소 초기화
vec.clear()
삽입
push_back()으로 삽입
vec.push_back(it.first);
삭제
erase() 로 삭제
인덱스 기준으로 삭제와 값 기준으로 삭제 다 가능
// 인덱스 기준
vec.erase(vec.begin() + idx);
정렬
오름차순, 내림차순 정렬
// 오름차순(기본)
sort(freqno.begin(), freqno.end());
// 내림차순
sort(freqno.begin(), freqno.end(), greater<int>());
사용자 정의 정렬(compare 함수 사용)
bool compare(Users user1, Users user2)
{
// 나이를 기준으로 오름차순 정렬
if (user1.age != user2.age)
{
return user1.age < user2.age;
}
// 나이가 같다면 들어온 순서(number)를 기준으로 정렬
return user1.number < user2.number;
}
sort(user.begin(), user.end(), compare);
특정 원소의 개수
// vector 안에서 3의 개수를 구함
count(vec.begin(), vec.end(), 3)
* 시간복잡도는 그냥 반복문으로 구하는거랑 똑같음
vector의 요소의 개수 출력
vec.size();