[ vector 초기화 ]
vector<int> v(n);
vector<vector<int>> vv(n, vector<int>(m));
[ vector의 멤버함수 ]
vector<int> v;
- v.assign(5,2); 2의 값으로 5개의 원소 할당
- v.front(); 첫번째 원소를 참조
- v.back(); 마지막 원소를 참조 (++v.back() 하면 마지막 원소의 값을 1 올릴 수 있다)
- v.clear(); 모든 원소를 제거, 원소만 제거하고 메모리는 남아있다.
- v.pop_back(); 마지막 원소를 제거
- v.insert(2,3); 2번째 위치에 3의 값을 삽입
- v.insert(2,3,4); 2번째 위치에 3개의 4의 값을 삽입 (뒤에 원소가 있다면 뒤로 밀림)
[ vector의 최대/최소 값 찾기 ]
- int value = *max_element(arr.begin(), arr.end());
- int value = *min_element(arr.begin(), arr.end());
- 인덱스 반환 : int index = max_element(arr.begin(), arr.end()) - arr.begin();
[ vector 정렬 ]
- 내림차순 : sort(arr.begin(), arr.end(), greater<int>());
// 오름차순이 기본이라 less 생략해도 됨
- 오름차순 : sort(arr.begin(), arr.end(), less<int>());
* arr.rbegin() : 끝에서 첫번째꺼
* arr.rend() : 맨끝 다음 빈칸
[ vector 특정 값 찾기 ]
- 찾은 원소의 인덱스 반환
int index = find(arr.begin(), arr.end(), 찾을값) - arr.begin();
못찾으면 원소의 개수를 반환한다.
- 존재 유무 확인
if(find(arr.begin(), arr.end(), 찾을값) == arr.end()) : 없음
if(find(arr.begin(), arr.end(), 찾을값) != arr.end()) : 있음
[ vector 이진 탐색 함수 ]
#include <algorithm> 추가
lower_bound : target 값보다 크거나 같은 첫번째 위치를 반환 (<= 이상)
upper_bound : target 값을 초과하는 첫번째 위치를 반환 (< 초과)
@ 주의: 이때 사용되는 벡터는 오름차순 정렬이 되어 있어야 한다!
lower_bound(arr.begin(), arr.end(), 찾을 수) - arr.begin() : 찾은 인덱스 반환
*lower_bound(arr.begin(), arr.end(), 찾을 수) : 찾은 수를 iterator로 반환받아 직접 접근
[ vector 특정 인덱스 지우기 ]
- arr.erase(arr.begin() + index);
[ vector 요소의 전체 합/부분 합 구하기 ]
- #include <numeric> 추가
- int num = accumulate(arr.begin(), arr.end(), 0);
이때 마지막 0은 초기값이다.
만약 int형이 아닌 long long형의 전체 합을 구하고 싶다면
초기값을 0이 아닌 0LL을 넣어야
오버플로우 발생이 일어나지 않는다. (오버플로우 에러도 안뜨고 쓰레기값 나옴)
[ 두 vector의 요소를 각각 곱하고 더하기 ]
- #include <numeric> 추가
- int num = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
주의할 점은 vec1보다 vec2의 크기가 크거나 같아야한다.
'💻코딩테스트 > 참고자료' 카테고리의 다른 글
[참고자료] 문자열 유용한 함수 정리 (0) | 2023.07.26 |
---|---|
[참고자료] 라이브러리 함수들의 시간복잡도 (0) | 2023.07.04 |
[참고자료] 코딩테스트 유용한 함수&자료 (0) | 2023.01.21 |