본문 바로가기
호구지책/C/C++/C#

[C++] vector 다루기

by 하늘의흐름 2015. 9. 23.
반응형

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는 할당된 메모리의 크기를 리턴한다.


출력결과




반응형

댓글