본문 바로가기

C++

[C++] 벡터(vector)와 메소드들(erase, insert) 그리고 binary search(lower_bound, upper_bound)

↓[C++] 벡터(vector)와 메소드들(push_back, front, back, begin, end, swap, size, empty) 바로가기

https://swblossom.tistory.com/26

 

[C++] 벡터(vector)와 메소드들(push_back, front, back, begin, end)

표준 템플릿 라이브러리(STL : Standard Template Library) 안에 컨테이너(container), 이터레이터(iterator), 알고리즘(algorithm)템플릿 등을 제공한다. 컨테이너는 배열과 같이 여러 개의 값을 저장할 수 있는..

swblossom.tistory.com


벡터에 insert 메소드가 있다. insert 메소드는 다른 벡터의 범위 값을 삽입할 때 사용한다.

예를 들어 v라는 벡터에 다른 벡터의 값을 추가하고 싶다면 추가하고 싶은 위치와 추가할 벡터의 시작 위치와 마지막 위치를 넣어주면 된다.

 

v.insert(v의 시작위치, 추가할 벡터의 시작위치, 추가할 벡터의 마지막위치);

 

erase메소드는 insert 메서드와 반대 기능을 한다. 벡터에서 범위 삭제를 할 때 사용한다.

 

v.erase(삭제를 시작할 위치, 삭제할 마지막 위치);

STL에서 범위는 두 이터레이터에 의해 정의되는데 [it1, it2)로 정의된다. it1은 포함하고 it2는 포함하지 않는다.(it2 바로 앞)

 

#include <stdio.h>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v1, v2;
    
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    
    v2.push_back(4);
    v2.push_back(5);
    v2.push_back(6);
    
    //v2에 v1삽입
    v2.insert(v2.begin(), v1.begin(), v1.end());
    
    //출력
	for(int i=0;i<v2.size();++i) printf("%d ", v2[i]); 
    printf("\n");
    
    //v2의 [2], [3] 삭제
    v2.erase(v2.begin()+2, v2.begin()+4);
    
	//출력
	for(int i=0;i<v2.size();++i) printf("%d ", v2[i]); 
    
    return 0;
}

 

결과값:

1 2 3 4 5 6
1 2 5 6

 


binary_search는 algorithm헤더 파일에 있습니다. 정렬되어 있는 배열, 컨테이너 등을 탐색하여 원하는 값이 있는지 여부를 확인하고 1과 0을 반환해 줍니다.

binary_search(v.begin(), v.end(), 찾고자하는 값)

주로 배열이나 벡터의 전체를 탐색할 것입니다.

 

lower_bound는 범위 내에서 value보다 작지 않은(크거나 같은) 첫 번째 요소를 가리키는 iterator를 반환합니다.

upper_bound는 범위내에서 value보다 큰 첫번째 요소를 가리키는 iterator를 반환합니다.

 

#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

int main() {
    
    vector<int> v1;
    
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    v1.push_back(5);
    v1.push_back(6);
    
    cout << binary_search(v1.begin(), v1.end(), 6) << endl;
    cout << binary_search(v1.begin(), v1.end(), 7) << endl;
    
    vector<int>::iterator it;
	it = lower_bound(v1.begin(), v1.end(), 3);
	cout << "lower_bound(6) : " << *it << endl; 
	
	it = upper_bound(v1.begin(), v1.end(), 5);
	cout << "upper_bound(5) : " << *it << endl; 
    
    return 0;
}

 

결과값:

1
0
lower_bound(6) : 3
upper_bound(5) : 6

 

1, 2, 3, 4, 5, 6의 배열에서

lower_bound(3)은 3보다 크거나 같은 3을 반환하였고 upper_bound(5)는 5보다 큰 첫 번째 요소인 6을 반환하였습니다.