vector라는 것은 동적 배열을 뜻한다.
크기가 자동으로 관리되는 배열로써
최대 확장크기는 이론상10억개이지만
실제로는 5억개까지 가능하다고 한다.
다른 자료구조를 잘 몰라도
vector를 잘 다룰 줄 안다면,
전부 커버가 가능할 정도로 vector는 유용하다고 한다.
(이 말의 출처는 winapi.co.kr인데,
현재 winapi.co.kr은 http://www.soen.kr/ 으로 도메인을 변경한 상태다.
옛주소는 이제 사용하지 않는다고 한다.)
그동안 자바만을 다뤄왔기에 C++ 언어를 다루는데에 상당히 애를 먹었다.
문자열 다루는 일이 만만치 않았기 때문이다.
그리고 간접참조* 주소참조& 등등의 기호가 섞여서
나올 때마다 각 기호의 의미들이 헷갈려서 애를 많이 먹었다.
-> 와 . 도 분명히 다른 경우일 텐데
그 구분이 명확하게 정리되지 않았고 말이다.
현재는 .은 하위맴버, 하위맴버함수에 접근할 때 쓰는 것으로 생각할 수 있는데,
-> 이거는 그 의미가 잘 와닿지 않는다. 이것은 스터디가 필요한 부분이고.
-> 이것은 화살표연산자라 하는데, 포인터 맴버를 참조할 때 편리하게
쓰기 위해서 사용하는 연산자라고 한다. (맴버연산자에 대한 강좌)
본론으로 와서 vector는 생각보다 쉽다.
vector는 C++ STL(standard template library 표준라이브러리) 에서
제공하는 것으로 C++ 전문가들이 C++을 쉽게 효과적으로
사용할 수 있게 만들어둔 함수라고 볼 수 있겠다.
쓰는 법은 예제로 보겠다.
#include "stdafx.h" #include "iostream" #include "vector" //C++ STL vector 테스트 해보기 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<char*> vi_users; int i = 0; int end = 0; char user_id1[16]; char user_id2[16]; char user_id3[16]; strcpy_s(user_id1,"dd00oo1"); strcpy_s(user_id2,"dd00oo2"); strcpy_s(user_id3,"dd00oo3"); vi_users.push_back(user_id1); vi_users.push_back(user_id2); vi_users.push_back(user_id3); end = vi_users.size(); for (int i = 0; i<end; i++ ){ cout << vi_users[i] << endl; } printf("size = %d, capacity = %d\n",vi_users.size(),vi_users.capacity()); }
간략하다.
instream은 c++ 기본 함수들을 불러오는 것이고
vector는 vector를 사용하기 위해 불러오는 것이고
char배열을 백터에서 쓰려고 했는데
char[], char 이런 형식은 쓸 수가 없었다.
vector<char*> vi_users; 이렇게 간접참조형으로 잡아주니
편리하게 문자열을 쓸 수가 있었다.
백터에서 요소를 뽑아볼 때는 배열처럼 [i] 을 써도 되고
at(i)를 써도 되는데.
at(i) 는 예외처리를 하기 때문에 속도가 조금 늦다.
안정성이 중요하다면 at(i)을.
속도가 중요하다면 at[i]를 쓰면 좋을 것이다.
마지막으로 프린트 한 것은
백터의 사이즈 조회다.
size는 갯수를 리턴하고
capacity는 할당된 메모리의 크기를 리턴한다.
출력결과
'호구지책 > C/C++/C#' 카테고리의 다른 글
[C#] 프로그램 실행 아이콘 변경하기 (0) | 2017.05.08 |
---|---|
[C#] 바코드 라이브러리 (0) | 2017.04.20 |
[MFC] CSstring 형변환 함수 (0) | 2017.02.16 |
[MFC] 클래스 호출하기 (0) | 2017.02.16 |
[C++] 32비트를 64비트로 포팅하기 (0) | 2016.12.16 |
[VC6] 원격 디버깅 (0) | 2016.12.08 |
[MFC] 리스트 컨트롤 (0) | 2015.08.07 |
비주얼스튜디오 단축키 (0) | 2015.07.09 |
댓글