Mộc Viên's Blog Mộc Viên's Blog
Làm thế nào để sử dụng std::ranges để làm việc với các dãy dữ liệu trong C++20?

Làm thế nào để sử dụng std::ranges để làm việc với các dãy dữ liệu trong C++20?

Ngày đăng:

Làm thế nào để sử dụng std::ranges để làm việc với các dãy dữ liệu trong C++20?

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;
}

Gần đây