본문 바로가기
Language&Framework&Etc/C++

C++ Vector란

by 머리올리자 2021. 1. 20.

Vector

  • 표준 라이브러리에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class
  • 동적 배열로 구성
  • 각 원소들이 선형적으로 배열
  • 벡터 컨테이너의 원소를 참조할 때 반복자를 이용해서 순차적 참조 가능
  • 처음 원소로부터의 상대적인 거리를 이용하여 접근 가능

 

  • 장점
  •   1) 동적으로 원소를 추가
  •   2) 크기가 자동적으로 들어남
  •   3) 각각의 원소를 원소의 인덱스 값으로 참조 가능
  •   4) 임의의 순서로 원소에 접근 가능

 

  • 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 많이 사용
  • 배열과 마찬가지로 원소들이 하나의 메모리 블록에 저장

 

  • 단점
  • 메모리 재할당이 발생할 수 있고 상당한 부하가 발생됨
  • 보통의 배열보다 더 많은 메모리 공간 필요

구조

vector를 생성하면 메모리 heap에 생성되며 동적할당

 

반복자

 - begin : 시작 부분을 가리키는 iterator를 리턴

 - end : 끝 부분을 가리키는 iterator를 리턴(마지막 값보다 한 칸 뒤 위치 값)

 - rbegin : 역순으로 첫번째를 가리키는 iterator를 리턴

 - rend : 역순으로 끝 부분을 가리키는 iterator를 리턴 (마지막 값보다 한 칸 뒤 위치 값)

 

※ 여기서 iterator는 일종의 포인터로 생각하면 된다. 즉 포인터로 vector 데이터에 접근하는 것이다.

이때 쓰이는 함수들이 begin, end, rbegin, rend이다.

 

요소 기준

- front() : 첫 번째 요소

- back() : 마지막 요소

- [i] : i번째 요소 반환(범위를 점검 X, at[i]보다 빠름) - 내장배열을 대체할 목적 - 효율적이어야 하기 때문에 범위 점검 X

- at[i] : i번째 요소 반환 (범위를 점검, [i]보다 느림)

 

위치 기준

- begin() : 첫 번째 위치

- end() : 마지막 다음 위치

 

크기 기준

- size() : 원소의 개수

- capacity() : 할당된 공간의 크기

 

사용법

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

int main(void)
{
	// 생성자
	vector<int> v1(5); // 0(기본값)으로 초기화 된 5개의 원소를 가지는 vector v1 생성
	vector<int> v2(5, 2); // 2로 초기화된 5개의 원소를 가지는 vector v2 생성
	vector<int> v3(v2); // v2를 복사해서 v3을 생성

	// 멤버 함수
	v1.assign(5, 2); // 2의 값으로 5개 원소 할당
	v1.at(2); // 2번째 원소 참조
	v1[2]; // 2번째 원소 참조

	v1.front(); // 첫번째 원소 참조
	v1.back(); // 마지막 원소 참조
	v1.clear(); // 모든 원소 제거 => 메모리는 유지 => size 줄어들고 capacity는 그래도
	v1.push_back(3); // 맨마지막 원소 뒤에 원소 3을 삽입
	v1.pop_back(); // 마지막 원소를 제거
	v1.begin(); // 첫번째 원소를 가리킴
	v1.end(); // 마지막의 "다음"을 가리킴
	v1.rbegin(); // reverse begin을 가리킨다(거꾸로 해서 첫번째 원소를 가리킴)
	v1.rend(); // reserve end를 가맄킨다(거꾸로 해서 마지막을 가리킴)

	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	/* 
	size_type : 벡터의 요소 수를 계산하는 형식
	size_type(unsigned int) 은 컴파일러가 vector<T> 클래스 템플릿을 생성할 때 vector<T> 클래스 내부에서 정의된다
	vector<T> 객체의 size와 capacity 타입은 vector<T>::size_type 
	원소의 개수를 셀 때 size_type을 사용하면 될 것 같다.
	*/

	/* size_type 사용 */
	for (vector<int>::size_type i = 0; i < v.size(); i++)
	{
		cout << v.at(i) << " ";

	}
	cout << endl << endl;
	
	for (vector<int>::size_type i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl << endl;

	/* int 사용 -> at은 사용 안된다 */
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << endl;
	}


}

 

참고

coding-factory.tistory.com/596

 

[C++] STL Vector 사용법 & 예제 총정리

Vector란? Vector는 C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class입니다. Vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기

coding-factory.tistory.com

langgeek.tistory.com/entry/Exceptional-C-Style-1-vector%EC%9D%98-%EC%98%AC%EB%B0%94%EB%A5%B8-%EC%9A%A9%EB%B2%95%EA%B3%BC-%EC%9E%98%EB%AA%BB%EB%90%9C-%EC%9A%A9%EB%B2%95

 

[Exceptional C++ Style] 1. vector의 올바른 용법과 잘못된 용법

[Exceptional C++ Style] 1. vector의 올바른 용법과 잘못된 용법 <난이도 4> 질문 [1] vector v 가 주어졌다고 할 때, 아래의 줄 A와 B의 차이는 무엇일까? void f(vector & v) { v[0]; // A v.at(0); // B } [2]..

langgeek.tistory.com

blockdmask.tistory.com/70

 

[C++] vector container 정리 및 사용법

안녕하세요.  BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..

blockdmask.tistory.com

m.blog.naver.com/PostView.nhn?blogId=kks227&logNo=60208809639&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[C++ 강좌] 071 - 표준 템플릿 라이브러리 (3) - 이터레이터 - iterator, begin(), end(), insert(), erase()

이번엔 STL에서 클래스의 내부에 만들어져 있는 이터레이터(iterator)라는 개념을 알아봅시다.이터레이...

blog.naver.com

 

'Language&Framework&Etc > C++' 카테고리의 다른 글

C++에서 문자 형태의 숫자를 입력 받았을 때 숫자 형태로 변경하는 방법  (0) 2021.04.11
Malloc 정리  (0) 2021.04.09
템플릿  (0) 2021.01.13
가상함수  (0) 2021.01.12
C++ 상속 예제  (0) 2021.01.10