vector
vector 정리
vector 를 자주 쓰는데 vector의 멤버 함수를 정리할겸 포스팅 해보자.
### vector 란?
-
간단하게 vector 컨테이너는 자동으로 메모리가 할당되는 배열.
-
Vector 장점으로는 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어남 (크기가 가변적으로 변하는 배열)
-
다만 속도적인 측면으로는 배열에 비해서 떨어진다.
1. Vector의 구조
- 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;
}
Leave a comment