42Seoul/CPP Module 08

ex00

재윤 2024. 2. 9. 19:24
반응형

들어가기 전 보고 가자!

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