본문 바로가기
카테고리 없음

STL(Standard Template Library)_vector

by hallojih 2021. 11. 4.

 - Vector STL

배열을 사용할 때는 크기를 명시해주어야하고, 무조건 해당 크기 안에서만 사용가능하다.

그러나 Vector는 일종의 가변 배열로, 크기를 늘렸다 줄였다 할 수 있다.

Vector는 Vector 헤더에 선언되어있다.

 

vector<int> v(100);        ----------------1)

v[20] = 10;                   ----------------2)

v[60] = -4;                   ----------------3)

 

1) type이 int이고 0으로 초기화된 100칸짜리 가변배열 v

2), 3) 일반적인 배열처럼 인덱스에 접근해서 값을 바꿀 수 있다.

 

 

- STL을 함수 인자로 넘길 때

출처_https://blog.encrypted.gg/923?category=773649

답은 0

STL도 구조체와 비슷하게 함수 인자로 보내면 복사본을 만들어서 보내기 때문에 func1에서 바꾼 것은 원본에 영향을 주지 않는다.

 

출처_https://blog.encrypted.gg/923?category=773649

1) cmp1 함수

두 vector를 인자로 넘겨받아 idx 번째 원소의 값을 비교한 결과를 반환하는 함수

 

Q) 두 vector의 크기가  N이라고 할 때 이 함수의 시간 복잡도는?  O(N)

     => v1,v2를 인자로 실어 보낼 때 원본으로부터 복사본을 만드는 비용을 생각해야한다.

          v1,v2의 크기가 N이므로 N개의 원소들을 하나하나 복사하는 과정은 O(N)이다.

 

그러나, idx 번째의 원소 값을 비교하는데 vector전체를 복사하는 것은 비효율적이다. 이럴 때 참조자를 이용하면 된다.

2) cmp2함수

v1,v2의 type을 vector<int>의 reference로 만들었다. 즉, cmp2가 호출될 때 복사본을 따로 만들어내지 않고 참조 대상의 주소정보만 넘어가기 때문에 시간 복잡도는 O(1)이 된다.

728x90
반응형

댓글