[#2] STL :: Vector Template Class

Fuji ㅣ 2022. 8. 25. 15:37

 

 

목차

  • 초기화
  • 인터페이스

 


vector 초기화

vector 템플릿 객체를 생성하려면 <vector> 헤더 파일을 추가해야한다. 그리고 사용할 데이터형을 나타내기 위해 통상적으로 type 표기를 사용한다. vector 템플릿은 동적 할당을 이용해 초기화한다.

 

 allocator
allocator는 메모리 관리에 사용되는 클래스다. STL 컨테이너 템플릿의 vector 템플릿의 원형은 다음과 같다.
template<class T, class Allocator = allocator<T> >
    class vector { ... 
만약 vector 객체를 초기화할 때 템플릿 매개변수를 위한 값을 생략하게 되면, vector는 allocator<T> 클래스를 디폴트로 설정한다.

 

코드 설명
vector<type> v; 비어있는 vector v를 생성한다
vector<type> v(5); 디폴트값 (0)으로 초기화 된 5개의 원소를 가지는 vector v를 생성한다.
vector<type> v(5, 10); 10으로 초기화된 5개의 원소를 가지는 vector v를 생성한다.
vector<type> v1(5, 10);
vector<type> v2(v1);
v2는 v1 vector를 복사해서 생성한다.

 

2차원 배열
코드 설명
vector< vector<type> > v1 (5, vector<type'>(7));  5행 7열의 2차원 벡터를 생성한다.
vector < vector <int> > v;
vector <int> v2;
v.push_back(v2); 
2차원 벡터인 v에 v2를 복사해 저장한다. 여기서 주의할 점은 복사한다는 점이다. v2와 v안에 들어있는 원소는 서로 독립적인 데이터이므로 v2를 수정한다고 해서 v의 원소에서도 적용되지 않는다.

 


 

vector 인터페이스

비교 

vector는 연산자 오버로딩이 구현되어있기 때문에 ==, !=, <, > 대소 비교가 가능하다.

 

 

vector 메서드

코드 설명
v.assign(5, 2); 2의 값으로 5개의 인덱스 공간을 확보한다.
v.at(index); 인덱스 숫자에 있는 데이터를 가져온다. (범위 검사 O)
v[index];
인덱스 숫자에 있는 데이터를 가져온다. (범위 검사 X)
v.push_back(data);
마지막 원소 뒤에 data를 추가한다. (stack push)
v.emplace_back(data);
마지막 원소 뒤에 data를 추가한다. (move 복사생성자)
v.pop_back(); 마지막 원소에 있는 data를 추출한다. (stack pop)
v.front();
첫번째 인덱스에 있는 데이터를 리턴한다.
v.back();
마지막 인덱스에 있는 데이터를 리턴한다.
v.begin();
첫번째 인덱스의 주소를 리턴한다.
v.end();
마지막 인덱스의 주소를 리턴한다. ( size() + 1 )
v.rbegin();
end()에서 반환된 주소를 시작점 주소로 리턴한다.
v.rend();
begin()에서 반환된 주소를 끝 지점 주소로 리턴한다.
v.reserve(n);
벡터의 크기를 초기화한다. (메모리를 미리 확보)
v.clear();
벡터에 있는  모든 데이터를 제거한다.
capacitiy, 즉 할당되어 있던 벡터의 크기는 유지된다.
v.resize(n);
벡터의 사이즈를 조정한다. (범위 초과시 0으로 초기화)
v.resize(n,3);
벡터의 사이즈를 조정한다. (범위 초과시 3으로 초기화)
v.size();
현재 데이터의 길이(원소의 개수)를 리턴한다.
v.capacity();
벡터에게 할당된 메모리 전체의 크기를 리턴한다.
v2.swap(v1);
v1과 v2의 모든 데이터를 교체한다. (크기 포함)
scope가 종료되기 전에 벡터의 메모리를 회수하고 싶을 경우에 사용하기도 한다.
capacity가 0인 임시 객체로 swap하면 된다.
 vector<int>().swap(v1);
v.insert(2, 3, 4);
인덱스 2번 위치에 3개의 값 4를 대입한다. 그 뒤의 값들은 밀린다.
v.insert(2, 3);
인덱스 2번 위치에 3을 대입한다. 삽입된 이터레이터를 반환한다.
v.emplace(2, 3);   insert와 기능은 동일하지만 move 복사 생성자를 사용한다.
v.erase(iter);
v.erase(start, end);

이터레이터 iter가 가리키는 원소를 제거한다.
매개변수가 2개일 경우 start부터 end - 1까지 제거한다.
v.empty();
vector가 빈 상태면 true를 리턴한다 ( size() == 0 )
capacity() 값은 연관이 없다.