본문 바로가기
Study About Computing/언어_Language

[C++/STL] vector container

by gamgok 2020. 3. 23.

2020. 03. 21 글 게시

2020. 04. 07 프로필 추가 및 내용 수정(iterator, front, back)

2020. 04. 15 예시 추가(push_back, size)

2020. 04. 15 예시 추가(erase, begin, size)

2022. 04. 20 내용 수정

 

목차
1. 벡터란
2. 사용

 

1. 벡터란?

요약
1. Vector 는 길이 변경이 자유로운 배열 자료형이고, 순차적이며 메모리 상에서 일렬로 나열된다.
2. Vector 는 메모리 상에서 일렬이기 때문에 배열과 같은 index"[]" 접근이 가능하다.

3. Vector 의 여러가지 메서드를 사용하여 읽기 좋게 프로그래밍이 가능하다.

 

벡터는 C++ 라이브러리로 제공되는 가변 길이의 배열 자료형입니다.

배열과 같이 순차적인 메모리 구조를 가지기 때문에 indexing(배열 위치를 참조하여 접근하는 것)이 가능합니다.

정적인 배열과 다른 점은 벡터는 길이가 가변적이라는 점이 있습니다.

 

벡터는 데이터의 양(size)가 용량(capacity)를 push_back 등의 연산을 사용하여 초과하게 되면

자동으로 크기를 재할당해줍니다. 용량은 초기에 선언된 벡터의 초기 길이에 2배로 증가합니다. 

배열을 사용한다면 사용자는 용량을 직접 관리 해주어야합니다.

 

벡터는 주로 배열이 아닌 가변 길이의 변수를 사용하거나 C++ 클래스의 추상화 장점을 이용하기 위해서 사용합니다.

Abstraction은 효율적인 프로그래밍에 중요한 요소입니다. vector를 사용한다면 원소의 삭제, 삽입, 용량 관리를

클래스의 메서드를 활용하여 보기 좋게 관리할 수 있으며, C++의 템플릿을 사용하여 구현하였기 때문에

여러 자료형에 알맞게 수정하여 사용이 가능합니다.

 

2. 사용

 

Vector의 선언

1
2
3
4
5
6
7
// C++
#include<vector>
 
int main(){
    std::vector<int> temp;
    return 0;
}
cs

Vector의 정의

1
2
3
4
5
6
7
8
std::vector<int> temp(510)
// 데이터가 10인 변수를 5개 포함하는 벡터
 
std::vector<int> temp(Iterator Start, Iterator End)
// Iterator를 이용해 시작점부터 종점까지 복사
 
std::vector<int> temp(other_vector)
// other_vector 의 내용물을 복사
cs

벡터 라이브러리에서 제공하는 기본 연산(많이 사용되는 것 위주)

멤버 설명
operator= 통상 벡터 container간에 연산이 가능하며 우측 피연산자의 원소를 좌측 피연산자로 복사합니다.
1
vector& operator= (const vector& x);
cs
begin iterator의 시작 지점을 반환합니다. ( 앞에 c를 붙이면 상수로 반환 )
1
2
      iterator begin();
const_iterator begin() const;
cs
end iterator의 끝 지점을 반환합니다. ( 위와 동일 )
1
2
      iterator end();
const_iterator end() const;
cs
rbegin iterator의 역방향 시작 지점을 반환합니다. ( 위와 동일 )
rend iterator의 역방향 끝 지점을 반환합니다. ( 위와 동일 )
size 벡터의 데이터양(원소 개수)을 반환합니다.
1
size_type size() const;
cs
max_size 벡터의 최대 데이터 용량을 반환합니다.
resize 벡터의 데이터 용량(재할당을 요구하지 않는 원소의 최대 수)을 수정합니다.
capacity 벡터의 데이터 용량(재할당을 요구하지 않는 원소의 최대 수)을 반환합니다.
1
size_type capacity() const;
cs
empty 벡터의 데이터양이 0인지 확인하여 bool 값을 반환합니다.
1
bool empty() const;
cs
operator[] 벡터의 데이터에 index를 통해 접근합니다. ( 잘못된 index여도 그대로 접근 시도 )
1
2
      reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
cs
at 벡터의 데이터에 index 방식으로 접근합니다. ( 잘못된 index에 접근하면 에러 throw )
1
2
      reference at (size_type n);
const_reference at (size_type n) const;
cs
front 벡터의 처음 데이터를 반환합니다.
1
2
      reference front();
const_reference front() const;
cs
back 벡터의 마지막 데이터를 반환합니다.
1
2
      reference back();
const_reference back() const;
cs
assign 벡터에 생성자와 같은 규칙으로 데이터를 설정합니다.
1
2
3
template <class InputIterator>
  void assign (InputIterator first, InputIterator last);    
void assign (size_type n, const value_type& val);
cs
push_back 벡터의 마지막에 값을 넣습니다.
1
2
void push_back (const value_type& val);
void push_back (value_type&& val);
cs
pop_back 벡터의 마지막 값을 제거합니다. ( 반환하지 않는다. )
1
void pop_back();
cs
insert 벡터의 특정 위치에 값을 삽입합니다. ( 여러개도 가능 )
erase 벡터의 특정 위치에 값을 제거합니다. ( 여러개도 가능 )
swap 벡터끼리 값을 교환(swap)합니다.
clear 벡터의 모든 데이터를 제거합니다. 즉, size의 결과가 0이 되도록 설정합니다.
이때, capacity가 0이 되는 것은 보장하지 않습니다.

사용 예시

* push_back과 size를 이용한 입출력 예시

Sublime Text3 - Dev C++ 사용

* iterator를 이용한 for 문 출력

ideone.com 사용

* erase 메서드의 사용

ideone.com 사용

'Study About Computing > 언어_Language' 카테고리의 다른 글

[C++/ETC] algorithm  (0) 2022.05.03
[C++/2] 자료형과 변수  (0) 2022.04.26
[C++/ETC] C++ 연산자 우선순위  (0) 2022.04.19
[C++/ETC] C++ 예약어(keywords)  (0) 2022.04.17
[C++/0] 언어에 대해서, C++의 특징  (0) 2022.04.05

댓글