ProgrammingLang/c++

[C++ 개발자되기] 18. std::vector 기본 사용법

jinkwon.kim 2020. 3. 27. 16:17
728x90
반응형

1. Vector 란?

  - 동적으로 확장/축소가 가능한 동적 배열(dynamic array)로 구현되어 있습니다.

 

2. Vector 메모리 구현 방식

  - 일반적인 배열처럼 개체들을 연속적인 메모리 공간에 저장 합니다.

 

3. Vector 접근 방식

  - iterator 를 통한 접근이 가능 합니다. 

  - position index(operator [])로도 접근이 가능 합니다. 

 

4. Vector Heder 

#include <vector>

 

5. Vector method

  1) 생성자 method

std::vector<int> v1; empty vector 생성
std::vector <int> v2(4, 100); size 4에 초기값 100으로 vector 생성
std::vector <int> v3(v2.begin(), v2.end()); iterator를 통한 vector 생성
std::vectro <int> v4(v3); 다른 vector 복사하여 생성

 

  2) 삽입/삭제 pair method

삽입 삭제
assign X
insert erase
push_back pop_back
x clear

 

  3) 수정

std::vector::at(index number) index 번호에 에 값을 저장한다.

 

  4) 검색 method

    - 존재 하지 않음. 구현 해야 한다. 

    1) std::find를 이용한 구현 
      http://www.cplusplus.com/reference/algorithm/find/

 

  5) 초기화

std::vector::clear() vector의 요소를 삭제합니다.

6. Vector 와 가장 비교 많이되는 List와의 차이

  1) Vector

    - 벡터는 일반적인 배열처럼 개체들을 연속적인 메모리 공간에 저장한다.

    - 즉, iterator 뿐 아니라 position index(operator [])로도 접근이 가능하다는 것이다.

    - 동적으로 확장/축소가 가능한 동적 배열(dynamic array)로 구현되어 있다.

 

  2) List

    - 리스트는 double linked list로 구현되어 있다.

    - 노드가 양 쪽으로 모두 연결 되어 있으며 삽입/삭제가 자주 발생하는 경우에 용이하다.

 

7. Vector 와 List의 장단점 

  1) Vector 

장점 단점
개별 원소 접근 가능 Container의 끝이 아닌 곳에 삽입/제거시  성능이 현저희 떨어짐,
- 이유는 객체들을 연속적인 메모리 공간에 저장하기 때문에 중간에 삽입 삭제시 메열 이동이 발생함. 
원소를 마지막에 삽입 하는 것이 빠름 동적이라 확장/축소가 편하나 확장시 비용이 크다.
램덤으로 원소 순회가 가능  
개별 원소에 대한 접근 속도가 빠름  

  2) List

장점 단점
컨테이너 어느 위치에서라도 삽입/제거가 빠름 원소의 인덱스로 직접 접근이 불가능함
원소들의 컨테이너 내 이동이 빠름 특정 원소에 접근하려면 처음이나 끝부터 선형 탐색을 해야함
  컨테이너 내 순회가 forward / reverse만 가능하여 느림
  원소간 상호 연결 정보를 위해 추가적 메모리 비용 발생

8. Vector sample Code

loop code

vector<int> vi;
...
for(int i : vi) 
  cout << "i = " << i << endl;
  
-----------------------------------------
for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
    it->doSomething();
 }


 

참조 싸이트 

http://www.cplusplus.com/reference/vector/vector/

https://loadofprogrammer.tistory.com/76 [큰 꿈을 그리는 프로그래머의 공간.]

http://www.cplusplus.com/reference/list/list/

728x90
반응형