반응형


/*

반복자(Iterator)

반복자의 기본연산은 다음과 같다.

* 역참조

++ 증가

-- 감소

== 비교

= 할당


이 연산만 이용한 프로그램은 모든 컨테이너에서 동작한다.

*/


template<class Iter>

void print(Iter begin, Iter end)

{

while (begin != end)

{

cout << *begin;

++begin;

}

cout << endl;

}


int main()

{

string s("hello");

print(s.begin(), s.end());


int n[10]{ 1,2,3,4,5,6,7,8,9,10 };

print(&n[0], &n[10]);


vector<string> v{ "2017", "4", "18" };

print(v.begin(), v.end());

}


print라는 함수에 무엇이 들어가서 출력을 할지 모르니까

template을 써주었다.



출력이 아주 잘 될 것이다.

순서대로

hellow

12345678910

2017418이 나올것임.


//////////////////////////////////////////////////////


template<class Iter>

void print(Iter begin, Iter end)

{

//cout << end - begin<<endl;


while (begin != end)

{

cout << *begin;

++begin;

}

cout << endl;

}


int main()

{

string s("hello");

// cbegin, cend 읽기전용

print(s.cbegin(), s.cend());


//글자를 거꾸로 찍어보자.


auto i = s.end()-1;

for (auto d = 0; d < s.size(); d++)

{

cout << *(i--);

}


}


이제 한번 글자를 거꾸로 찍어보는것을 하려고 한다.

auto는 정말로 편한것 같다.

물론 모르고 막 쓴다면 문제가 되겠지만

auto를 사용해서 초기화 시 주어지는 값으로 타입을 추론하여 가장 적합한 것으로 알려준다.

나중에 한번 더 정리해야겠다.


어쨌든 여기서 알게된 것은

cbegin과 cend를 통해서 읽기 전용으로 해준다고 한다.

위에서 auto i = s.end()-1;했을 때 

iterator를 쓴것과 비슷한(?)것 같다.

<vector>::iterator B_Iter = v.begin() 이렇게해서 썼는데

cbegin이랑 cend을 쓰는것이 비슷한?것 같았다.


위 소스 코드를 출력하면

olleh로 아주 잘 나올 것 이다.





반응형

'프로그래밍 > STL' 카테고리의 다른 글

람다함수  (0) 2017.09.14
가장 작은값을 찾을 때.  (0) 2017.04.30
람다(Lambda)함수  (0) 2017.04.30
STL  (0) 2017.04.28

+ Recent posts