◆vector 클래스의 정의
벡터 클래스는 시퀀스 컨테이너에 대한 클래스 템플릿입니다. 벡터는 지정된 형식의 요소를 선형 배열에 저장하고 모든 요소에 대한 빠른 임의 액세스를 허용합니다.
- 어려우니 자료형의 리스트라고 생각하자
◆ vector 클래스의 구문
// vector 구문
template <class Type, class Allocator = allocator<Type>>
class vector
◆ vector 클래스의 헤더, 사용 방법
// 헤더
#include <vector>
using namespace std;
int main()
{
// allcator 까지 명시한 vector 선언, default 되있으므로 필요는 없다.
// allocator 클래스 템플릿은 형식 Type의 개체 배열에 대한 스토리지 할당 및 해제를 관리하는 개체를 설명합니다.
vector<int, allocator<int>> vec0;
// 10 사이즈의 빈 벡터를 생성합니다.
vector<int> vec1(10);
// 10 사이즈의 1로 가득찬 벡터를 생성합니다.
vector<int> vec1_2(10, 1);
// 10x10 사이즈의 빈 벡터를 생성합니다.
vector<vector<int>> vec2(10, vector<int>(10));
}
◆vector의 함수
※미리 알아야 할 지식
// TODO 하이퍼링크 달린 글 쓰기
iterator
: 쉽게 말해 포인터의 자식
vector<int>::iterator it;
vec.begin()
: 해당 vector의 첫 번째 요소에 대한 iterator을 제공합니다.
vec.end()
: 해당 vector의 끝에 대한 iterator을 제공합니다.
둘다 주로 다른 함수를 사용하기 위해 범위를 제공하는데 쓰인다.
- ex) sort(vec.begin(),vec.end())
begin의 사용 예시
vector<int> vec{1, 2, 3, 4, 5};
// First Value , 5
cout << *vec.begin() << endl;
// First Address, 0x1efa7e51ab0
cout << &(*vec.begin()) << endl;
vec.insert()
: 지정된 위치에 있는 요소 또는 여러 요소를 벡터에 삽입합니다.
: 구문에 따라 크게 3가지 사용방법으로 나뉩니다.
// 1.
iterator insert(
const_iterator position,
const Type& value);
iterator insert(
const_iterator position,
Type&& value);
// 2.
void insert(
const_iterator position,
size_type count,
const Type& value);
// 3.
template <class InputIterator>
void insert(
const_iterator position,
InputIterator first,
InputIterator last);
1번의 경우 인자로 iterator과 value를 받아서 iterator에 해당하는 위치에 value를 삽입합니다. (뒤는 밀어줌)
2번의 경우 iterator, count, value를 받아서 iterator 위치에 value값을 count만큼 삽입합니다.
3번의 경우 iterator 3개를 받아서 삽입할 위치와 복사할 객체의 시작위치, 끝 위치를 통해 삽입합니다.
- 다른 자료형을 삽입할때 주로 사용합니다.
예시)
// 100을 vec의 처음에 삽입
vec.insert(vec.begin(), 100);
// 9를 3번 vec의 처음에 삽입 {9, 9, 9}
vec.insert(vec.begin(), 3, 9);
// vec의 시작에 vec2를 삽입
vec.insert(vec.begin(), vec2.begin(), vec2.end());
vec.emplace_back()
: 내부에서 생성된 요소를 벡터의 끝에 추가합니다. (공간을 생성합니다.)
template <class... Types>
void emplace_back(Types&&... args);
vec.pop_back()
: 벡터의 끝에 있는 요소를 삭제합니다.
void pop_back();
vec.size()
: 벡터에 있는 요소 수를 반환합니다.
size_type size() const;
vec.empty()
: 벡터가 비어 있는지 테스트합니다.
bool empty() const;
vec. erase()
: 벡터의 지정된 위치에서 요소 또는 요소 범위를 제거합니다.
: 매개변수인 iterator의 갯수 에따라 단일 대상이나 범위를 지워줍니다.
// 1.
iterator erase(
const_iterator position);
// 2.
iterator erase(
const_iterator first,
const_iterator last);
vec.swap()
: 두 벡터의 요소를 교환합니다.
template <class Type, class Allocator>
void swap(vector<Type, Allocator>& left, vector<Type, Allocator>& right);
◆vector 연산자
특이하게 vector에는 ==. !=, <, <= 연산자가 오버로딩되어 있습니다.
operator== , operator!=
: 연산자의 좌변에 있는 개체가 우변에 있는 개체와 같은지 같지 않은지 테스트합니다.
bool operator==(const vector<Type, Allocator>& left, const vector<Type, Allocator>& right);
bool operator!=(const vector<Type, Allocator>& left, const vector<Type, Allocator>& right);
operator<, operator<=
: 연산자의 좌변에 있는 개체가 우변에 있는 개체보다 작은지 테스트합니다.
: 연산자의 좌변에 있는 개체가 우변에 있는 개체보다 작거나 같은지 테스트합니다.
※단, 이때 비교는 vec[0]끼리하고 값이 다르면 return bool, 같다면 vec[1]을 비교하는 식으로 진행된다.
※>도 연산이 가능하다.
bool operator<(const vector<Type, Allocator>& left, const vector<Type, Allocator>& right);
bool operator<=(const vector<Type, Allocator>& left, const vector<Type, Allocator>& right);
'C++ > C++ STL' 카테고리의 다른 글
[C++ STL] 코딩테스트를 위한 basic_string (0) | 2023.10.18 |
---|---|
[C++ STL] 코딩테스트를 위한 algorithm (1) | 2023.10.16 |
[C++ STL] 코딩테스트를 위한 string (0) | 2023.10.16 |