들어가기 전 보고 가자!
STL,반복자 개념
https://wo-dbs.tistory.com/176
STL, 컨테이너, 반복자 개념
STL(Standard Template Library)이란? → 프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리 STL은 C++을 위한 라이브러리로 알고리즘, 컨테이너, 함수자, 반복자 4가지로 구성되어
wo-dbs.tistory.com
컨테이너
vector
https://wo-dbs.tistory.com/177
vector
vector 기본 사용법 → std::vector는 가변 크기의 배열을 나타내는 C++ 표준 라이브러리 컨테이너이다. 이는 배열과 유사하지만 크기를 동적으로 조정할 수 있는 장점을 가지고 있습니다. 아래는 std::
wo-dbs.tistory.com
list
https://wo-dbs.tistory.com/178
list
list → C++의 std::list는 이중 연결 리스트를 구현한 컨테이너로, 데이터를 삽입, 삭제, 검색하는데 효율적이다. std::list는 벡터와는 달리 임의 접근이 느리지만, 원소를 삽입하거나 삭제하는데 있
wo-dbs.tistory.com
STL 라이브러리
find
https://wo-dbs.tistory.com/180
find
→ STL(Standard Template Library)에서 제공하는 std::find 함수는 지정된 값을 검색하여 해당 값이 컨테이너에서 처음 발견되는 위치를 찾는 함수이다. std::find 함수는 순차적으로 컨테이너를 탐색하면서
wo-dbs.tistory.com
- 이 문제는 템플릿과 STL, 반복자를 사용해보는 문제임
문제 조건 → T 유형을 허용하는 함수 템플릿 easyfind를 작성합니다. 두 개의 매개변수를 사용합니다.
typename T::iterator easyfind(T &container, int value)
→T가 정수의 컨테이너라고 가정하면 이 함수는 첫 번째 매개변수에서 두 번째 매개변수가 처음 나타나는 것을 찾아야 합니다.
그러니까 value값을 컨테이너에서 찾으라는 말임.
이때 find, iterator를 사용
easyfind.hpp
#ifndef EASYFIND_HPP
# define EASYFIND_HPP
#include <list>
#include <algorithm>
#include <vector>
#include <iostream>
template<typename T>
typename T::iterator easyfind(T &container, int value)
{
typename T::iterator iter;
iter = std::find(container.begin(), container.end(), value);
if (iter == container.end())
throw std::runtime_error("fail to find value");
std::cout << "success to find value\\n";
return iter;
}
#endif
반복자에 typename을 지정해주는 이유
- 이렇게 클래스 안에 iterator이란 변수가 생성 되어 있는데 easyfind 함수에서 클래스 A로 본다면
- 클래스 A에 iterator의 값이 5라고 가정.
- A::iterator iter == 5 iter; 가 되어버리기 때문에 typename으로 반복자라는 타입이라고 말해줘야 하기 때문에 typename이 붙는다.
class A {
static int iterator;
};
class B {
typename ~ iterator;
}
easyfind(A(), 0);
template<typename T>
typename T::iterator easyfind(T &container, int value)
{
typename T::iterator iter;
iter = std::find(container.begin(), container.end(), value);
if (iter == container.end())
throw std::runtime_error("fail to find value");
std::cout << "success to find value\\n";
return iter;
}
'42Seoul > CPP Module 08' 카테고리의 다른 글
ex02 (0) | 2024.02.09 |
---|---|
ex01 (0) | 2024.02.09 |