3-1.vector
배열의 붙어있는 형태,사용법과 유사하긴한데 차이점으로 백터는 크기가 정해져있지않은 "무한대 배열"이란것.
내가 만약 10개인데 11개를 넣었으면 백터는 크기를 자동으로 늘려준다.
다만 아쉬운점은 배열에 비해 속도가 좀 느리다.(배열을 보강하고자 만듬)
배열은 이름과 인덱스로 관리했었는데, 백터는 클래스(백터라는 클래스)로 백터객체가 요소들(객체)을 관리한다.백터객체는 아래와 같다.
Ex)
vectorMyVector
//백터(배열)긴 한데 int형 백터(배열)이다.이렇게 백터 객체를 만듬
우리가 클래스 객체를 선언하면 눈에 보이진않지만 숨겨져있는 멤버변수와 멤버함수가 있는데 이 두개를 정의하는것은 클래스를 따라간다.(클래스:붕어빵틀,객체:붕어빵,객체 만들때마다 똑같은게 계속 생겨남)
이 백터란 클래스에 대해 알아보자면
백터를 선언할때 for문으로 푸시백해서 배열에 값을 넣어주는걸 5번 돌렸다고 치면 size 했을때는 5를 반환해준다.
*벡터는 배열의 문법을 그대로 쓸 수 있어 v1[i] 이런식으로 접근할 수 있다.
이유는 얘도 동적할당 받으면서 통째로 붙어있는 메모리를 빌려오니깐 접근이 가능함
*메인에 있는 백터 객체는 스택영역에, 백터 객체 안의 멤버변수와 멤버함수는 힙영역에
3-2. vector의 멤버변수
a. 백터는 무조건 12바이트(백터 자체가 12바이트고, 무한대란건 백터가 가리키는 공간이 무한이란것이다.)
우리가 동적할당할때 주소값을 받아오기때문에 포인터로 받아오는데 이때 int형 1개를 받아오든 100개를 받아오든 포인터의 크기는 변하지않는다.그거랑 같음
b.백터는 Size, Data, Capacity라는 멤버변수 3개를 가지고있다.
Size : 백터가 저장하고 있는 현재 원소의 갯수
Data : 동적할당받은 배열의 메모리 시작 주소,얘를 포인터변수의 이름으로 보면된다.
얘를 가지고 배열이 필요할때마다 동적할당받아 가져오는것.배열 2개짜리를 받든 추가로 늘리든할때마다 동적할당으로 주소값을 계속 받아서 이 포인터 변수인 Data가 들고 있는것이다.
Capacity : 백터가 담을 수 있는 최대 원소의 갯수
3-3.또다른 백터의 활용법(반복자를 이용했을때)
vector v1;
for(int i =1; i <= 5; i++ )
v1.push_back(i);
for(auto i = v1.begin(); i != v1.end(); i++)
cout << *i << " ";
이게 이터레이터(반복자)라는건데
*i는 i가 가리키는 곳의 원소을 의미함 거길 가서 그 원소를 찍어준다.
즉 배열의 원소를 계속 가리키는것
즉 v1안에 Data라는 포인터가 있다고하면 그 Data가 가리키는 배열이 있을것이고 v1.begin과 v1.end로 반복자(i가 반복자다.Iterator의 I)를 뜯어온다.그리고 그 반복자가지고 값에 접근할 수 있다.
반복자는 포인터 문법과 비슷하며, 객체의 멤버변수와 멤버함수에 접근할 수 있다.
3-4.vecter의 멤버함수들(인터넷 참고)
ㄱ.Iterator 관련 멤버함수
begin
첫 번째 원소를 가리키는 반복자를 리턴한다.
end
마지막 원소를 가리키는 반복자를 리턴한다.
등등
ㄴ.Capacity 관련 멤버함수
empty
원소 존재 유무를 체크한다.아무것도 없으면 true, 있으면 false를 리턴한다.
resize
백터의 크기를 변경하고 default값이나 임의의값으로 초기화한다.
등등
ㄷ.Modifiers 관련 멤버함수
clear
백터의 모든 함수를 제거한다.
Push_back
벡터의 끝에 원소를 추가한다.
3-4.백터의 사용법
-> 강의에선 인터넷의 함수들을 보면서 쓰면된다해서 이건 강의 정리가 끝난후 새로 STL을 정리할때 정리하겠다.(이론으로 x,경험으로 터득)
4.블루프린트에서 쓰는 동적배열과 백터의 차이
ㄱ.동적배열
동적 메모리 할당을 이용한 생성한 배열
c++ 공부하면서 new 연산자로 힙영역으로부터 메모리를 빌려오고 거기에 데이터를 넣으며 Delete로 반납했던 문법이 동적 배열을 쓰는 방식이다.
문법에 있던 포인터 변수(배열)로 원소들을 for문 돌면서 초기화 시키고 for문 돌면서 원소를 인자로 하는 원하는 함수를 실행시키고 마지막에 delete하는식
ㄴ.백터
c++에서 동적 배열 대신에 쓰는 크기가 변하는 컨테이너(자료구조)
5.언리얼엔진에선 백터보다 TArray라는 컨테이너 클래스를 써서 이 배열을 위주로 학습할 예정이다.
참고사이트
언리얼엔진 공식사이트(TArray: 언리얼 엔진의 배열) https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/TArrays/