Vector 3 추가/삭제/변경
-swap
같은 타입의 두 벡터의 엘리먼트들을 바꾼다. 크기는 상관없다.
std::vector<int> foo(3,100) ; // 100을 값으로 갖는 요소 3개
std::vector<int> bar(5, 200) ; // 300을 값으로 갖는 요소 5개
foo.swap(bar); // foo와 bar 두 개의 벡터들이 서로 바뀐다.
foo ; ==> 200 200 200 200 200
bar ; ==> 100 100 100
-push_back ; 벡터 마지막에 요소 추가. 복사(새롭게) 추가됨. 벡터 크기가 자동으로 증가. 메모리도 부족하면 자동으로 추가 할당됨.
std::vector<int> v1 ;
v1.push_back(100) ;
v1.push_back(200) ;
-pop_back ; 벡터 마지막 요소를 제거한다. 리턴값 없음.
마지막 요소값을 확인하려면 pop_back()하기 전에 back()으로 확인 가능.
while( !v1.empty() ) {
sum+=v1.back() ;
v1.pop_back() ;
}
v1벡터가 빌때까지 하나씩 요소들을 제거함. 요소 제거 전에 제거할 값을 얻어 총 합을 구한다.
-insert
특정 위치가 새로운 요소를 삽입한다.
insert ( const_iterator position, const value_type & val) ;
insert( " , size_type n, const value_type &val) ;
insert(", InputIterator first, InputIterator last) ;
insert(", value_type&& val) ;
insert(", initializer_list<value_type> il) ;
리턴값 ;새로 추가한 첫번째 요소 위치 이터레이터
std::vector<int> v1(3,100) ; // 100 100 100
std::vector<int>::iterator it ;
it = v1.begin() ;
it = v1.insert(it, 200) ; // 200 100 100 100
v1.insert(it, 2, 300) ; // 300 300 200 100 100 100
std::vector<int> v2(2, 400) ; // 400 400
v1.insert(v1.begin()+2, v2.begin(), v2.end()) ; // 300 300 400 400 200 100 100 100
(v2.end() 전 위치까지만 추가함).
int arr[]={501,502,503};
v1.insert(v1.begin(), arr, arr+3 ) ; // 501 502 503 300 300 400 400 200 100 100 100
(arr+3 전 위치까지 추가함.)
-erase
특정 위치 또는 위치 범위의 요소들을 제거
v1.erase(v1.begin()+5) ; // 6번째 요소를 제거함. (인덱스는 0부터시작)
v1.erase(v1.begin(), v1.begin()+3) ; // 앞에서 부터 3개를 제거. (두 번째 파라미터로 지정한 위치 전까지만 제거됨)
-clear ; 전체 요소 삭제
-emplace
할당과 삽입. insert는 복사하여 삽입이지만, emplace는 할당된 것을 그대로 사용하여 성능면에서는 낫다.
std::vector<int> v1={10,20,30} ;
auto it = v1.emplace(v1.begin()+1, 100) ; // 10, 100, 20, 30
v1.emplace(it, 200) ; // 10, 200, 100, 20, 30
v1.emplace(v1.end(), 300) ; // 10, 200, 100, 20, 30, 300
-emplace_back
push_back()과 거의 똑같다. push_back()은 복사하여 사용하는데, emplace_back은 construct 한 것을 그대로 사용하기 때문에 성능면에서 좀 낫다.
v1.emplace_back(100); // v1 마지막에 100 추가.