본문 바로가기

[ C/ C++ 프로그래밍 ]/[ STL ]

[ 혼연 정리 ] 시퀀스 컨테이너 - 1 [ 벡터 ]

ㅇ 벡터

- 동일 타입의 자료 집합인 시퀀스 컨테이너의 대표
- 내부 구성원리는 C의 정적 배열과 거의 유사
- 요소들의 크기가 같고 인접한 위치에 이웃하여 배치된다
- 메모리를 적게 차지
- 임의 위치를 빠른 속도로 엑세스
- 삽입,삭제속도 느림 ( 인접 배치 원칙을 지키기 위해서 요소를 이동시켜야됨)
- template <class Type, class Allocator = allocator<Type> > class vector
  class Type : 요소 타입, class Allocator : 할당기(생략가능)


ㅇ 벡터의 생성자

 - explicit  vector();      /// 디폴트 생성자
 - explicit  vectorr(size_type n, const T& v = T() );   /// 크기 와 T 타입의 초기값 지정
 - vector (const vector& x);     /// 복사 생성자
 - vecotr (const_iterator first, const_iterator last ) ;  /// 구간 복사 생성자

ㅇ 생성자 예제

 1 #include <iostream>
2 #include <string>
3 #include <vector>
4
5 using namespace std;
6
7 template <typename C>
8 void dump(const char *desc, C c) 9 {
10     cout.width(12);
11     cout << left << desc << "==> " ;
12     copy(c.begin(), c.end(), ostream_iterator<typename C::value_type>(cout," "));
13     cout << endl;
14 }
15
16 void main()
17 {
18
19     /// 디폴트생성자
20     vector<string> v1;
21     dump("v1",v1);
22
23     /// 실수형벡터, 크기10, 초기값X
24     vector<double> v2(10);
25     dump("v2", v2);
26
27     /// 정수형벡터, 크기10, 초기값7
28     vector<int> v3(10, 7);
29     dump("v3", v3);
30
31     /// v3 벡터의복사(깊은복사)
32     vector<int> v4(v3);
33     dump("v4", v4);
34
35     ///  반복자구간을받아들이는생성자, (주의)반복자의끝은항상제외
36     int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
37     vector<int> v5(&ar[2], &ar[5]);
38     dump("v5", v5);
39 }



- 벡터는 요소 저장을 위한 메모리를 자동으로 관리 ==> string의 관리 함수들과 거의 유사




ㅇ 멤버 함수



 - resize 지정한 크기로 요소 수를 늘린다.
 - capacity는 할당되어 있는 메모리양, 크기는 size보다 크거나 같다.
 - reserve는 미리 메모리를 할당해 놓는 함수
 - clear는 벡터를 비운다.
 - empty 벡터가 비어 있는지 점검

ㅇ 멤버 함수 예

 1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 void main()
6 {
7 vector<int> vi;
8
9     /// 최대크기
10 printf("max_size = %d\n", vi.max_size());
11    
12     /// '123', '456' 를추가, capacity : 할당되어있는메모리양, size 보다크거나같다
13     vi.push_back(123);
14     vi.push_back(456);
15     printf("size = %d, capacity = %d\n", vi.size(), vi.capacity() );
16    
17     // 크기를변경, 새로할당된요소는0으로초기화
18     vi.resize(10);
19     printf("size = %d, capacity = %d\n", vi.size(), vi.capacity() );
20
21     /// 메모리를미리할당
22     vi.reserve(20);
23     printf("size = %d, capacity = %d\n", vi.size(), vi.capacity() );
24 }



ps : 출처 및 자세한 내용은  www.WinAPI.co.kr 참고