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 [큰 꿈을 그리는 프로그래머의 공간.]
'ProgrammingLang > c++' 카테고리의 다른 글
[매크로] macro 사용시 유용한 것 (0) | 2021.07.03 |
---|---|
[C++ 개발자되기] 19. 과거 시간 구하기 (0) | 2020.04.09 |
[C++ 개발자되기] 17. std::cout 출력 포맷 변경 iomanip (2) | 2020.03.18 |
[C++ 개발자되기] 16. smart pointer (0) | 2020.02.24 |
[C++ 개발자되기] 15. 파일 다루기 1부(rename, fileszie, directory listring, exists) (0) | 2020.02.10 |