4 minute read

effective c++을 읽는데 공부 안한 c++ stl의 벡터와 반복자가 나왔다.
그래서
을 번역했다.
C++ 의 Standard Template Library는 세 가지로 구성되어있음
1. Containers : 객체 모여있는 거 관리하는 용임. 그 유명한 덱, 리스트, 벡터, 맵 등이 해당함
2. 알고리즘 : 컨테이너에 사용함. 초기화, Sorting, 검색, 안에 들어있는 값 수정 등을 할 수 있음
3. 반복자 Iterators : 컨테이너에 들어 있는 것을 훑어 볼 수 있음
벡터 컨테이너 예제

[code language=”cpp”]
#include
#include
using namespace std; </p>

int main() {
// 정수 보관하는 벡터 만들기
vector vec;
int i;

// 벡터의 사이즈를 보여줌
cout << "vector size = " << vec.size() << endl;

// 벡터 안에 값을 뒤로 밀어 넣음
for(i = 0; i < 5; i++){
vec.push_back(i);
}

// 값이 들어간 벡터의 사이즈를 보여줌
cout << "extended vector size = " << vec.size() << endl;

// 벡터 안의 값에 접근함
for(i = 0; i < 5; i++){
cout << "value of vec [" << i << "] = " << vec[i] << endl;
}

// 반복자를 사용해서 벡터 안의 값에 접근함
vector::iterator v = vec.begin();
while( v != vec.end()) {
cout << "value of v = " << *v << endl;
v++;
}

return 0;
}
[/code]

결과는 이러함

[code]vector size = 0
extended vector size = 5
value of vec [0] = 0
value of vec [1] = 1
value of vec [2] = 2
value of vec [3] = 3
value of vec [4] = 4
value of v = 0
value of v = 1
value of v = 2
value of v = 3
value of v = 4
[/code]

</div>
C++ Standard Library는 두 개로 분류됨
1. The Standard Function Library : C언어에서 온 건데, 어떤 클래스에도 속해있지 않고 일반적으로 사용할 수 있는 함수들이 들어있음
또 이렇게 분류됨
1) 입출력
2) 문자, 문자열 다루기
3) 수학 계산용
4) 시간, 날짜, 지역
5) 동적 할당
6) Miscellaneous, 잡동사니, misc.
7) 넓은 문자열 함수 ex) islower()
2. The Object Oriented Class Library : 클래스랑 클래스와 관련된 함수들 모아둔 것
1) 표준 C++ 입출력 클래스
2) 문자열 클래스
3) 숫자 클래스
4) STL 컨테이너
5) STL 알고리즘
6) STL 함수 객체
7) STL 반복자
8) STL 할당자
9) 지역화 라이브러리
10) 오류 처리 클래스
11) 기타 등등
이러고 책 읽으라면서 책 추천해주면서 끝남 ㅡㅡ;
std::vector::iterator iter = vec.begin(); 에서 </div>
const std::vector::iterator iter = vec.begin(); 면 </div>
iter가 가르키는, 벡터 안에 있는 요소는 변경할 수 있지만 (*iter)
iter값 자체가 상수화되어서 변경 불가
*iter 즉, 벡터 안에 있는 값을 상수화하기 위해서는
std::vector::const_iterator cIter = vec.begin(); 이렇게 해야함 </div>
그러면 반복을 신나게 할 수 있는데 벡터의 값은 변경으로부터 보호함