나무 숲

[C++ STL] vector 튜토리얼 (1) - 생성자 Constructor 본문

Career

[C++ STL] vector 튜토리얼 (1) - 생성자 Constructor

wood.forest 2017. 5. 9. 17:55



https://www.tutorialspoint.com/cpp_standard_library/index.htm

이곳을 기반으로 번역, 이해, 연습했습니다.

c++ stl중에 제일 중요한 라이브러리 두 가지가 <vector>과 <map>이라는데 저는 사실 한 번도 써본적이 없어서..ㅠ;; 한번에 다 하기엔 초보 단계라 하나씩 해보려 합니다~


-


<vector>

Constructor



벡터는 크기를 변경할 수 있는 연속적인 컨테이너입니다. 컨테이너란 같은 타입의 데이터를 모은 객체입니다. 연속 컨테이너는 선형으로 원소를 저장합니다.


벡터는 인접하는 메모리 위치에 원소를 저장하고, 연산자 []를 통해 아무 원소에나 직접적인 접근이 가능합니다. 배열과는 달리, 벡터는 런타임 중 필요한 만큼 축소하거나 확장할 수 있습니다. 벡터의 저장소는 자동으로 관리됩니다.


런타임 중 수축/확장하기 위해서, 벡터 컨테이너는 추가될 수 있는 값들의 수용을 위한 예비 저장소를 가져야 합니다. 따라서 벡터의 실제 크기는 사이즈보다 크게 됩니다. 따라서, 배열과 비교하여, 벡터는 저장소를 관리하고 효율적인 방향으로 동적으로 증가(할당)할 수 있는 기능이 있는 대신 더 많은 메모리를 소비합니다.


사이즈 0의 벡터 또한 유효합니다. 이러한 경우 vector.begin() 과 vector.end()는 같은 위치를 의미합니다. 하지만 front() 또는 back()을 사용하는 동작은 정의되지 않습니다.


생성자는 값을 반환하지 않습니다.



vector::vector



default constructor

원소가 없는 빈 컨테이너를 생성합니다. 컨테이너의 크기는 항상 0입니다.


선언

vector<자료형> 컨테이너이름;









fill constructor

각 원소에 할당된 값이 있는 n개의 원소를 가진 컨테이너를 생성합니다.


시간 복잡도

O(n)


선언

vector<자료형> 컨테이너이름(n, value);

n 컨테이너의 크기

value 컨테이너의 각 원소에 할당될 값



 








range constructor

first에서 last까지의 최대 범위가 있는 컨테이너를 생성합니다.

컨테이너에서 [fisrt, last]의 원소들에 값을 할당합니다.


시간 복잡도

O(n)


선언

vector<자료형> 컨테이너이름(first, last);

first 범위의 시작 위치 iterator

last 범위의 마지막 위치 iterator










copy constructor

이미 존재하는 컨테이너 x의 원소를 복사하여 가진 컨테이너를 생성합니다.


시간 복잡도

O(n)


선언

vector<자료형> 컨테이너이름(x);

x 같은 타입의 다른 컨테이너












move constructor

move semantics를 이용하여 다른 컨테이너의 내용으로 구성된 컨테이너를 생성합니다.

이름 그대로 '복사'가 아닌 '이동'이기에 원소를 뺏긴 컨테이너는 비게 됩니다.


시간 복잡도

O(n)


선언

vector<자료형> 컨테이너이름(move(x));

x 같은 타입의 다른 컨테이너











initializer list constructor

initializer list로부터 컨테이너를 생성합니다.


시간 복잡도

O(n)


선언

vector<자료형> 컨테이너이름(ilist);

ilist 벡터에 값을 할당할 initializer list







+) auto에 대해

https://wikidocs.net/399

C++11에서 auto를 사용하면 변수를 선언할 때 특정 데이터형을 지정하지 않을 수 있다고 합니다.

다시말해 받은 값이 무엇이든(정수/문자열/심지어 클래스까지) 그것에 대한 자료형을 추론하여 자동으로 지정해줍니다.


헌데 위 예제에서는 왜 auto를 썼을까? auto를 안쓰면 뭘 쓸 수 있지?

vector<int>::iterator itr = vector.begin();

을 통해 iterator반복자를 선언해주어야 합니다.




728x90
반응형

'Career' 카테고리의 다른 글

네트워크 모델  (0) 2017.05.16
네트워크 범주  (0) 2017.05.14
데이터 통신과 네트워킹  (0) 2017.05.07
클럭 신호 Clock signal - 상승 에지rising edge, 하강 에지falling edge  (0) 2017.04.30
gcc vi편집기 명령어  (0) 2017.04.20
Comments