Sử dụng std::ranges trong C++20
std::ranges là một trong những tính năng mạnh mẽ được giới thiệu trong C++20, giúp làm việc với các dãy dữ liệu trở nên dễ dàng và linh hoạt hơn. Dưới đây là cách bạn có thể sử dụng std::ranges:
Các khái niệm cơ bản
#include <iostream>
#include <vector>
#include <ranges>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// Lọc các số chẵn
auto even = numbers | std::views::filter([](int n) { return n % 2 == 0; });
// In kết quả
for (int n : even) {
std::cout << n << " ";
}
// Output: 2 4 6 8 10
return 0;
}
Các phép biến đổi phổ biến
#include <iostream>
#include <vector>
#include <ranges>
#include <algorithm>
#include <string>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// Nhân mỗi phần tử với 2
auto doubled = numbers | std::views::transform([](int n) { return n * 2; });
// Lấy 3 phần tử đầu tiên
auto first_three = doubled | std::views::take(3);
// In kết quả
for (int n : first_three) {
std::cout << n << " ";
}
// Output: 2 4 6
return 0;
}
Kết hợp nhiều phép biến đổi
#include <iostream>
#include <vector>
#include <ranges>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// Lọc số lẻ, nhân với 3, và lấy 3 phần tử đầu
auto result = numbers
| std::views::filter([](int n) { return n % 2 != 0; })
| std::views::transform([](int n) { return n * 3; })
| std::views::take(3);
// In kết quả
for (int n : result) {
std::cout << n << " ";
}
// Output: 3 9 15
return 0;
}