/*
반복자(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 |