현재 주로 개발하시는 분들은 모바일 개발자들이 많을거라 생각을 하니 vector 라는 이름 보다는 array 라는 용어가 더 익숙 하겠지요.
vector 는 STL 에서 제공하는 array 성 데이터를 관리의 목적으로 만들어진 Template Class 중 하나 입니다.
(c++11 에서는 array 라는 클래스를 제공 하고 있습니다.)
vector<Data type> variable; 과 같이 선언 하여 씁니다.
간단히 1부터 100까지 변수를 추가하여 값을 출력하는 코드를 만들어 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <vector> int main() { std::vector<int> vecTest; for(int i=1; i<=100; i++) { vecTest.push_back(i); } for(int i=0; i<100; i++) { printf("vector[%d]=%d\n", i, vecTest[i]); } return 0; } |
< 위 코드는 우분투 환경에서 g++ 9.2.1 에서 빌드 되었습니다 >
코드를 보시면 알겠지만 일반적인 C언어 array 를 다루는것과 별차이는 없지만 기존 array처럼 고정 영역을 할당해서 관리하는것이 아닌 내부 저장 되는 영역을 push_back 이라는 멤버 함수의 호출로 지속적으로 추가 하는 방식으로 유동적인 메모리 핸들링을 위해서 많이 쓰이는 템플릿 클래스 입니다.
vector 관련 상세한 인터페이스는 http://www.cplusplus.com/reference/vector/vector/ 여기서 확인 하실수 있습니다.
제가 여기서 추가로 설명하고자 하는것은 제가 자주 사용하던 패턴과 사용함에 있어 필요로 생각하는 요소들만 정리해서 안내 해드리겠습니다.
a. push_back : vector 에 순차적으로 멤버를 추가 해주는 메소드 입니다. 위 샘플에서도 확인 하실수 있듯이 멤버에 대한 순차적 추가로 쓰실수 있습니다.
b. size : vector 에 저장된 멤버에 대한 갯수를 리턴해주는 메소드 입니다.
c. clear : vector 에 저장된 멤버를 모두 지우는 메소드 입니다.
d. erase : vector 에 저장된 멤버중 하나 또는 그 이상을 지우는 메소드 입니다.
e. insert : vector 에 멤버를 추가 할때 순서가 아닌 특정 위치에 추가 할수 있는 메소드 입니다.
f. begin : iterator 를 이용하는 방식을 이용할때 맨 처음에 지시하는 멤버를 리턴합니다.
g. end : iterator 를 이용하는 방식을 이용할때 맨 마지막에 지시하는 멤버를 리턴합니다.
위 설명된 항목들을 활용한 샘플 코드를 만들어 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <stdio.h> #include <vector> int main() { std::vector<int> vecTest; //초기 멤버 추가. for(int i=1; i<=100; i++) { vecTest.push_back(i); } //추가된 멤버의 갯수 출력. printf("vecTest Count : %d\n", (int)vecTest.size()); //[] 연산자를 이용한 멤버 접근 방법. for(int i=0; i<100; i++) { printf("vector[%d]=%d\n", i, vecTest[i]); } //iterator 지시자를 이용한 멤버 접근 방법. std::vector<int>::iterator iteAccess; for(iteAccess = vecTest.begin(); iteAccess != vecTest.end(); iteAccess++) { printf("vector member = %d\n", *iteAccess); } //20번쨰 위치에 200 엠버 추가. std::vector<int>::iterator iteInsert; iteInsert = vecTest.begin(); for(int i=0; i<20; i++) iteInsert++; vecTest.insert(iteInsert, 200); printf("vector Count: %d, vecTest[20] = %d\n", (int)vecTest.size(), vecTest[20]); //20번째 삽입한 200 멤버 제거. std::vector<int>::iterator iteDelete; iteDelete = vecTest.begin(); vecTest.erase(iteDelete+20); printf("vector Count: %d, vecTest[20] = %d\n", (int)vecTest.size(), vecTest[20]); //50 ~ 100 멤버 삭제. std::vector<int>::iterator iteRangeDel; iteRangeDel = vecTest.begin(); vecTest.erase(iteRangeDel+50, iteRangeDel+100); printf("vector Count: %d\n", (int)vecTest.size()); //전체 멤버 삭제. vecTest.clear(); // 또는 vecTest.erase(vecTest.begin(), vecTest.end()); printf("vector Count: %d\n", (int)vecTest.size()); return 0; } |
vector 의 기능은 제가 링크를 걸은 곳에서 더 많은 기능을 확인 하실수 있습니다.
vector 는 기본적으로 선형 저장 클래스 입니다. 기능적으로 중간 삭제나 삽입 기능이 존재 하지만 성능상으로는 크게 좋지는 않기 때문에 순차적인 저장과 접근을 쓰는데 쓰시는게 더욱 용이합니다.
댓글 없음:
댓글 쓰기