나무 숲
[C++ STL] vector 튜토리얼 (1) - 생성자 Constructor 본문
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반복자를 선언해주어야 합니다.
'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 |