STL - vector

이승덱·2021년 7월 21일

CPP

목록 보기
47/70
#include <iostream>

#include <vector>

using namespace std;

// 오늘의 주제 : vector

int main()

{

 // STL (Standard Template Library)

 // 프로그래밍할 때 자료구조/알고리즘들을

 // 템플릿으로 제공하는 라이브러리

 // 컨테이너9container) : 데이터를 저장하는 객체 (자료구조 Data Structure)

 // vector [동적 배열]

 // - vector의 동작 원리 (size/capacity)

 // - 중간 삽입/삭제

 // - 처음/끝 삽입/삭제

 // - 임의 접근

 // 배열

 // 배열크기를 유동적으로 변경할 수 없다.

 const int MAX_SIZE = 10;

 int arr[MAX_SIZE] = {};

 

 for (int i = 0;i < MAX_SIZE;i++) {

 arr[i] = i;

 }

 for (int i = 0;i < MAX_SIZE;i++) {

 //cout << arr[i] << endl;

 }

 // 동적 배열

 // 매우 매우 중요한 개념 -> 어떻게 배열을 유동적으로 사용한 것인가?

 // 1) 여유분을 두고 메모리를 할당한다.

 // 2) 여유분까지 꽉 찼으면, 메모리를 증설한다.

 // Q1) 여유분은 얼만큼이 적당할까?

 // Q2) 증설을 얼만큼 해야 할까?

 // Q3) 기존의 메모리에 저장된 데이터를 증설한 메모리에 어떻게 처리하는가?

 //증설한 데이터에는 기존 데이터를 복붙하는 형식으로 진행

 //실제 데이터개수의 1.5배~2배를 증설하게 컴파일러가 설계되어있다.

 //증설된 여유분(capacity)은 데이터 개수(size)가 줄어들었을 때 같이 줄지 않는다

 vector<int>v2(1000, 0); //size와 초기값을 선언시 초기화

 vector<int>v3 = v2; //복사

 vector<int> v;

 v.reserve(1000); //여유분(capacity)을 지정함

 v.resize(1000); //벡터의 크기(size)를 지정함

 v.capacity(); //여유분을 포함한 용량 개수

 const int size = v.size(); //벡터의 실제 사용하고있는 데이터 개수

 

 for (int i = 0;i < 1001;i++) {

 v.push_back(100);

 cout << v.size() << " " << v.capacity() << endl; //여유분 = (실제 데이터개수x1.5)씩 증가

 

 }

 //증설된 여유분(capacity)은 데이터 개수(size)가 줄어들었을 때 같이 줄지 않는다

 cout << v.capacity() <<" " <<v.size(); v.clear(); //clear를 했을 때 size는 0이 되었지만 capacity는 그대로인걸 알 수 있다.

 vector<int>().swap(v); //임시 벡터랑 v를 스왑하므로써 v의 capacity를 초기화한다.

 

 

 for (int i = 0;i <size;i++) {

 //cout << v[i] << endl;

 }

 return 0;

}
profile
공부 기록용 블로그입니다

0개의 댓글