기사 디렉토리
1. 미리 정의된 함수 객체의 예 - 컨테이너 요소를 큰 것부터 작은 것 순으로 정렬합니다.
1. 정렬 정렬 알고리즘
C++ 표준 템플릿 라이브러리(STL, Standard Template Library)는 <algorithm> 헤더 파일 에 정의된 일반 알고리즘인 정렬 알고리즘 기능을 제공합니다.
정렬 알고리즘은 컨테이너의 요소를 정렬하는 데 사용됩니다 . 이 알고리즘은 매우 효율적이며 지정된 반복자 범위 내에서 요소를 정렬 할 수 있으며 정렬 순서는 사용자가 지정한 비교 함수를 기반으로 정의할 수 있습니다.
사용자 지정 비교 함수는 이진 조건자입니다.
std::sort 알고리즘의 기본 정렬 규칙의 함수 프로토타입은 다음과 같습니다.
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
- RandomIt first, RandomIt last 매개변수: 이 함수는 정렬해야 하는 시퀀스 범위를 정의하는 두 개의 무작위 액세스 반복자 first 및 last를 허용합니다 . 참고: 이 범위는 앞쪽으로 닫혔다가 열리는 간격입니다.
- 기본 비교 규칙: 이 범위의 요소는 기본적으로 < 연산자를 사용하여 비교 및 정렬됩니다 . 사용자 정의 클래스가 < 연산자 오버로드 기능을 구현하지 않으면 오류가 보고될 수 있습니다.
std::sort 알고리즘 사용자 정의 정렬 규칙의 함수 프로토타입은 다음과 같습니다.
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
- RandomIt first, RandomIt last 매개변수: 이 함수는 정렬해야 하는 시퀀스 범위를 정의하는 두 개의 무작위 액세스 반복기 first 및 last 를 허용합니다 . 참고: 이 범위는 앞쪽으로 닫혔다가 열리는 간격입니다.
- 사용자 정의 비교 규칙 비교 comp 매개변수: 이 매개변수는 이진 조건자, 즉 2개의 매개변수를 받고 부울 값을 반환하는 함수 객체입니다. 이 범위의 요소는 이 이진 조건자 규칙을 사용하여 정렬됩니다.
2. 더 큰 미리 정의된 함수 객체
C++ 표준 템플릿 라이브러리(STL, 표준 템플릿 라이브러리)는 이진 술어인 더 큰<T> 사전 정의 함수 객체를 제공합니다 . 이 함수 객체의 도움으로 두 값을 편리한 방식으로 비교하여 결과를 결정할 수 있습니다. 첫 번째 값이 두 번째 값보다 큰가요?
이 함수 개체는 주로 STL 알고리즘에서 정렬 순서, 검색 조건 및 기타 시나리오를 제어하는 데 사용됩니다.
더 큰<T> 함수 객체는 <function> 헤더 파일에 정의되어 있으며, 비교할 요소 유형을 지정하는 일반 유형 매개변수 T를 허용합니다 .
더 큰<T> 함수 객체는 내부적으로 함수 호출 연산자인 Operator()를 오버로드하므로 이 클래스의 인스턴스 객체를 일반 함수처럼 호출할 수 있습니다.
2. 코드 예제 - 사전 정의된 함수 객체
1. 코드 예시
코드 예:
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"
int main() {
// 创建一个 set 集合容器
vector<int> myVector;
// 向容器中插入元素
myVector.push_back(9);
myVector.push_back(5);
myVector.push_back(2);
myVector.push_back(7);
// 向 foreach 循环中传入 Lambda 表达式
for_each(myVector.begin(), myVector.end(), [](int a) {
std::cout << a << " ";
});
cout << endl;
// 将 myVector 容器中的元素按照从大到小的顺序排列
sort(myVector.begin(), myVector.end(), greater<int>());
// 向 foreach 循环中传入 Lambda 表达式
for_each(myVector.begin(), myVector.end(), [](int a) {
std::cout << a << " ";
});
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
2. 실행결과
결과 :
9 5 2 7
9 7 5 2
계속하려면 아무 키나 누르십시오. . .