Ranges v3
Ranges v3 là một thư viện C++ được thiết kế để hoạt động với các phạm vi giá trị, thay vì các giá trị riêng lẻ. Nó cung cấp một tập hợp các tiện ích và thuật toán để thao tác và chuyển đổi các phạm vi giá trị một cách hiệu quả và biểu cảm. Thư viện được lấy cảm hứng từ khái niệm Range được đề xuất để đưa vào thư viện chuẩn C++ cho C++20.
Tổng quan
Ranges v3 bao gồm ba thành phần chính:
- Bộ điều hợp phạm vi: Đây là các thuật toán có thể kết hợp để chuyển đổi một phạm vi thành một phạm vi mới. Chúng giúp tạo các chế độ xem lười biếng trên dữ liệu mà không thực sự sửa đổi nó.
- Bộ điều hợp hành động: Đây là những thuật toán sửa đổi phạm vi tại chỗ. Ví dụ: sắp xếp hoặc lọc trực tiếp các phần tử trong vùng chứa.
- Bộ điều hợp hành động: Đây là những thuật toán sửa đổi phạm vi tại chỗ. Ví dụ: sắp xếp hoặc lọc trực tiếp các phần tử trong vùng chứa.
Ví dụ mã code
Dưới đây là một số ví dụ về mã sử dụng thư viện Ranges v3:
Bao hàm thư viện
Trước tiên, bạn cần bao hàm các tệp tiêu đề thích hợp từ thư viện. Để sử dụng toàn bộ thư viện Ranges v3, bạn chỉ cần thêm tệp tiêu đề range/v3/all.hpp:
#include <range/v3/all.hpp>
Sử dụng bộ điều hợp phạm vi
Bạn có thể sử dụng bộ điều hợp phạm vi để thao tác và chuyển đổi phạm vi. Ví dụ: bạn có thể sử dụng bộ điều hợp view::filter và view::transform để tạo một dải ô mới chỉ chứa các số chẵn rồi bình phương chúng:
#include <iostream>
#include <range/v3/all.hpp>
using namespace ranges;
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6};
// Tạo một phạm vi mới chỉ chứa các số chẵn, rồi bình phương chúng.
auto even_squares = numbers | view::filter([](int n) { return n % 2 == 0; })
| view::transform([](int n) { return n * n; });
// In phạm vi even_squares.
for (auto n : even_squares) {
std::cout << n << ' ';
}
// Đầu ra: 4 16 36
return 0;
}
Sử dụng bộ điều hợp hành động
Bộ điều hợp hành động được sử dụng để sửa đổi phạm vi tại chỗ. Ví dụ: bạn có thể sử dụng bộ điều hợp action::sort và action::unique để sắp xếp và xóa các phần tử trùng lặp khỏi bộ lưu trữ:
#include <iostream>
#include <range/v3/all.hpp>
using namespace ranges;
int main() {
std::vector<int> numbers = {5, 3, 1, 4, 4, 2, 2};
// Sắp xếp các số và loại bỏ các số trùng lặp.
numbers |= action::sort | action::unique;
// In vecto số đã sửa đổi.
for (auto n : numbers) {
std::cout << n << ' ';
}
// Đầu ra: 1 2 3 4 5
return 0;
}
Ranges v3 cung cấp nhiều loại bộ điều hợp và hành động để làm việc với các phạm vi theo cách biểu cảm và hiệu quả hơn. Bạn có thể khám phá thêm trong tài liệu chính thức.