vector

2 minute read

vector 정리

vector 를 자주 쓰는데 vector의 멤버 함수를 정리할겸 포스팅 해보자.

### vector 란?

  • 간단하게 vector 컨테이너는 자동으로 메모리가 할당되는 배열.

  • Vector 장점으로는 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어남 (크기가 가변적으로 변하는 배열)

  • 다만 속도적인 측면으로는 배열에 비해서 떨어진다.

1. Vector의 구조

exRepo1

  • vector를 생성하면 메모리 heap에 생성되며 동적할당된다.
front() :  번째 원소  
back() : 마지막 원소  
begin() : 첫번째 위치  
end() : 마지막의 다음 위치  
size() : 원소의 개수  
capacity() : 할당된 공간의 크기  

Size 와 Capacity 가 따로 있는 이유

매번 새로운 원소가 들어올 때마다 새로운 메모리가 할당되는 것은 비효율적임.
그래서 vector는 새로운 원소가 벡터에 추가되면 메모리 공간을 추가적으로 할당되는 방식으로 이루어져 있다. (capacity가 모자랄 경우 capacity/2 만큼의 capacity를 늘리는 방식) 만약 입력될 원소의 개수를 알 수 있다면 reserve를 사용하여 미리 capapcity 메모리를 할당해 놓으면 좀 더 호율적으로 vector를 사용할 수 있다.

vector 선언

vector<vector<int>> v;               // 2차원 백터 생성(행과 열 모두 가변)
vector<int> v(5);                    // 5개의 원소를 0으로 초기화
vector<int> v(5, 3);                 // 5개의 원소를 3으로 초기화
vector<int> v2(v);                   // 벡터 v를 복사하여 벡터v2 생성

vector 값 추가

v.push_back(10);  // 마지막 위치에 숫자 10 추가
v.insert(2,10);   // index 2의 위치에 숫자 10 추가
v.insert(2,3,4)   //2번쨰 위치에 3개의 4값을 추가

vector 값 삭제

v.pop_back();                        // 마지막에 넣은 값 제거
v.erase(vec.begin()+10);             // index 10의 값을 제거
v.erase(vec.begin(), vec.begin()+5);  // index 0~5의 값을 제거
v.clear();                           //모든 값 제거

vector 크기 구하기

v.size();   //vector의 원소 갯수
v.capacity; //vector의 물리적 크기

vector 값 출력

vector<int> v;
for (int i=0; i<5; i++) 
  v.push_back(i); //vector 요소 추가
  

for (int i = 0; i < v.size(); i++)
  cout << v[i] << " "; //모든 값 출력 : 0 1 2 3 4
	
cout << v[2] << endl;      //index 2의 값 출력 : 2
cout << v.front() << endl; //처음 요소 출력 : 0
cout << v.back() << endl;  //마지막 요소 출력 : 4

Iterator 를 활용한 vector 출력

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  // 1~5의 숫자를 Vector에 저장
  vector<int> v1;
  for (int i = 1; i <= 5; i++)
    v1.push_back(i);

  // Iterator로 Vector의 아이템을 출력
  // begin() : 첫번째 위치의 Iterator를 리턴
  // v1.end() : 마지막 아이템 다음 위치의 Iterator를 리턴
  for (auto i = v1.begin(); i != v1.end(); ++i)
    cout << *i << " ";

  // 반대 방향으로 아이템을 출력
  // rbegin(), rend()는 역순(reverse)의 Iterator를 리턴
  cout << "\n";
  for (auto ir = v1.rbegin(); ir != v1.rend(); ++ir)
    cout << *ir << " ";

  // 배열처럼 Vector[index] 으로 아이템 출력
  cout << "\n";
  for (int i = 0; i < v1.size(); i++)
    cout << v1[i] << " ";

  // Vector.at(index)로 아이템 출력
  cout << "\n";
  for (int i = 0; i < v1.size(); i++)
    cout << v1.at(i) << " ";

  return 0;
}

Tags:

Categories:

Updated:

Leave a comment