2 분 소요

Vector의 개념

  • 자동으로 메모리가 할당되는 배열입니다.
  • vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다.
  • 배열처럼 최대 크기가 정해져 있는 것이 아닌, 필요에 따라 유동적으로 확장되는 배열입니다.
  • 배열에 비해 속도가 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있습니다.


Vector 사용법

  • vector 헤더 파일을 포함해야 합니다.
  • vector<[데이터 타입]> 이름; 으로 vector를 선언합니다.
  • using namespace std를 추가하면 편리하게 사용할 수 있습니다.
    #include <deque> 
    using namespace std;
    vector<int> v;
    


Vector 기본 함수

  • v.at(n)
    • vector의 n번째 원소를 참조합니다.
    • v[n]보다 상대적으로 속도가 느립니다.
  • v[n]
    • vector의 n번째 원소를 참조합니다.
    • v.at(n)보다 상대적으로 속도가 빠릅니다.
  • v.assign(n,i)
    • i의 값을 n번 반복해서 할당합니다.
  • v.front()
    • vector의 첫 번째 원소를 참조합니다.
  • v.back()
    • vector의 마지막 원소를 참조합니다.
  • v.begin()
    • 첫 번째 원소를 가리킵니다.
  • v.end() -마지막 원소의 다음을 를 가리킵니다.

  • v.push_back(i)
    • vector의 마지막 원소 뒤에 원소 i를 삽입합니다.
  • v.pop_back()
    • vector의 마지막 원소를 삭제합니다.
  • v.clear()
    • vector의 모든 요소를 삭제합니다.
  • v.reserve(n)
    • n개의 데이터를 저장할 수 있는 공간을 동적할당으로 예약합니다.
  • v.resize(m)
    • v의 크기를 m으로 변경합니다.
    • 원래 크기보다 작아지는 경우, 뒤에서부터 지워집니다.
    • 원래 크기보다 커지는 경우, 빈자리를 0으로 초기화합니다.
  • v.size()
    • vector의 원소 수를 반환합니다.
  • v.capcity()
    • 할당된 공간 크기를 반환합니다.
  • v2.swap(v1)
    • v1과 v2의 모든 것을 교환합니다.
  • v.insert(i,k)
    • i번째 위치에 k를 삽입합니다.
  • v.erase(iterator)
    • iterator가 가리키는 위치의 요소를 삭제합니다.
  • v.empty()
    • vector가 비어있으면 true 아니면 false를 반환합니다.


Vector 기본 사용 예시

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v = { 1,2,3 };
    cout << "v[1] : " << v[1] << "\n";  // v[1] : 2
    cout << "v.back() : " << v.back() << "\n";  // v.back() : 3
    v.push_back(10);
    cout << "v.back() <added> : " << v.back() << "\n";  // v.back() <added> : 10

    cout << "v.size() : " << v.size() << "\n";  // v.size() : 4
    v.push_back(12);
    v.push_back(14);
    v.push_back(16);
    v.push_back(18);
    cout << "v.size() <added> : " << v.size() << "\n";  // v.size() <added> : 8

    v.pop_back();
    cout << "v.size() <pop-1> : " << v.size() << "\n";  // v.size() <pop-1> : 7
    cout << "v.back() <pop-1> : " << v.back() << "\n";  // v.back() <pop-1> : 16
    v.pop_back();
    cout << "v.size() <pop-2> : " << v.size() << "\n";  // v.size() <pop-2> : 6
    cout << "v.back() <pop-2> : " << v.back() << "\n";  // v.back() <pop-2> : 14
    v.pop_back();
    cout << "v.size() <pop-3> : " << v.size() << "\n";  // v.size() <pop-3> : 5
    cout << "v.back() <pop-3> : " << v.back() << "\n";  // v.back() <pop-3> : 12
}
  • 결과
v[1] : 2
v.back() : 3
v.back() <added> : 10
v.size() : 4
v.size() <added> : 8
v.size() <pop-1> : 7
v.back() <pop-1> : 16
v.size() <pop-2> : 6
v.back() <pop-2> : 14
v.size() <pop-3> : 5
v.back() <pop-3> : 12


Vector 중복 제거

  • 기본 형태
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(),vec.end()), vec.end());
  • 진행 과정
#include <iostream>
#include <vector>
#include <algorithm> 

using namespace std; 

void print_vec(vector<int> vec){    
	for(int i=0; i<vec.size(); i++)    {        
		cout<<vec[i]<<"  ";    
	}     
	cout<<endl;
}

int main(){    
	vector<int> vec;    
	int arr[] = {7,2,1,2,7,5};    
	vec.assign(arr, arr+6); //벡터 원소 할당 
	print_vec(vec);

	sort(vec.begin(), vec.end()); //정렬     
	print_vec(vec);

	vector<int>::iterator uit= unique(vec.begin(), vec.end()); //중복원소 (쓰레기값으로 변환 후) 뒤로 보냄      
	print_vec(vec);     
	
	vec.erase(uit, vec.end()); //삭제     
	print_vec(vec);     
	return 0;
}
  • 결과
7  2  1  2  7  5
1  2  2  5  7  7
1  2  5  7  7  7
1  2  5  7


참조

카테고리:

업데이트: