Standard Template Library, 자료구조, 함수, 알고리즘과 같은 함수를 포함한 라이브러리이다.
알고리즘에서는 정렬, 탐색과 같은 함수로 이루어져 있다.
C++에서 컨테이너는 사전에 정의된 자료구조를 이야기 한다.
Sequence Container : 데이터를 단순히 저장해 놓는 자료구조를 뜻한다. array, vector, deque, forward_list, list ,,
associative container : 자료가 저장되면서 자동으로 정렬되는 자료구조를 말합니다.
unordered associative container : 자동정렬이 되지 않는 자료구조.
container adapter : 시퀀스 컨테이너를 이용해 만든 자료구조를 뜻한다.
기본적으로 어느정도의 자료구조는 지원해주는 것 같다. 확실히 나중에 더 찾아보긴 해야할 것 같다.
C++에서 이터레이터(Iterator)와 펑터(Functor)는 각각 다음과 같은 역할을 수행하는 개념입니다.
1. 이터레이터 (Iterator):
이터레이터는 컨테이너(예: 배열, 리스트, 집합 등)에 저장된 요소를 순차적으로 접근하는 방법을 제공하는 객체입니다. 이터레이터를 사용하면 컨테이너의 요소를 반복하면서 처리할 수 있습니다. 이터레이터는 C++ 표준 라이브러리에서 제공되는 다양한 컨테이너 클래스(예: vector, list, set, map 등)에 대해 일반화된 방법으로 접근할 수 있도록 해줍니다.
이터레이터는 일반적으로 반복문과 함께 사용됩니다. 반복문에서 이터레이터를 사용하여 컨테이너의 요소를 하나씩 가져와 처리할 수 있습니다. 다음은 간단한 예시 코드입니다:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 벡터의 요소를 출력하기 위해 이터레이터 사용
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
위의 예시에서 `numbers.begin()`은 첫 번째 요소를 가리키는 이터레이터를 반환하고, `numbers.end()`는 마지막 요소의 다음을 가리키는 이터레이터를 반환합니다. 이렇게 반환된 이터레이터들을 사용하여 벡터의 요소에 접근하고 출력합니다.
2. 펑터 (Functor):
펑터는 함수처럼 동작하는 객체를 의미합니다. 함수 객체(Function Object)라고도 불리며, 일반 함수와 달리 객체로서 상태를 유지할 수 있습니다. 펑터는 함수 호출 연산자(`operator()`)를 오버로딩하여 사용되며, 이를 통해 펑터 객체를 함수처럼 호출할 수 있습니다.
펑터를 사용하면 함수처럼 동작하는 객체를 다른 함수에 인자로 전달하거나, 알고리즘과 함께 사용하여 특정 작업을 수행할 수 있습니다. 다음은 펑터를 사용한 간단한 예시 코드입니다:
#include <iostream>
// 덧셈을 수행하는 펑터
struct AddFunctor {
int operator()(int a, int b) {
return a + b;
}
};
int main() {
AddFunctor add;
int result = add(3, 4); // 펑터 객체를 함수처럼 호출
std::cout << "Result: " << result << std::endl;
return 0;
}
위의 예시에서 `AddFunctor`는 덧셈을 수행하는 펑터로, `operator()` 함수를 오버로딩하여 덧셈 연산을 정의합니다. `add` 객체를 함수처럼 호출하면 `operator()` 함수가 실행되어 덧셈이 수행되고, 그 결과가 반환됩니다.
펑터는 일반 함수와 달리 상태를 유지할 수 있기 때문에 특정 상황에 따라 다른 동작을 수행하거나 상태를 조작하는 등의 유연한 기능을 구현할 수 있습니다.
댓글