💻코딩테스트/참고자료

[참고자료] vector 유용한 함수 정리

공대 컴린이 2023. 7. 26. 14:45
728x90

[ 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의 크기가 크거나 같아야한다.

728x90