Giới thiệu về std::span
std::span là một tiện ích trong C++20 để tham chiếu tới dãy dữ liệu liên tục mà không cần sao chép. Nó cho phép thao tác trên mảng, vector, array hoặc một phần của chúng một cách an toàn và hiệu quả.
Khai báo và sử dụng cơ bản
Để sử dụng std::span, bạn cần include <span>. Bạn có thể tạo span từ vector, mảng tịnh (std::array) hoặc mảng C truyền thống. Ví dụ:
#include <span>
#include <vector>
#include <array>
#include <iostream>
void printSpan(std::span<const int> span) {
for (const auto& element : span) {
std::cout << element << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::span<int> vecSpan(vec);
std::array<int, 5> arr = {6, 7, 8, 9, 10};
std::span<int> arrSpan(arr);
int cArray[] = {11, 12, 13, 14, 15};
std::span<int> cArraySpan(cArray, 5);
printSpan(vecSpan);
printSpan(arrSpan);
printSpan(cArraySpan);
return 0;
}Tạo span từ một phần của container
std::span cho phép bạn tạo một span mới từ một phần của container. Điều này hữu ích khi bạn chỉ cần làm việc với một vùng con của dữ liệu.
std::vector<int> vec = {1, 2, 3, 4, 5};
std::span<int> partialSpan(vec.data() + 1, 3); // span đại diện cho {2, 3, 4}
printSpan(partialSpan);Sửa đổi dữ liệu thông qua span
Khi tạo span không const, bạn có thể thay đổi phần tử thông qua span và thay đổi sẽ phản ánh trong container gốc.
std::vector<int> vec = {1, 2, 3};
std::span<int> spanVec(vec);
spanVec[0] = 100; // vec[0] cũng thay đổi thành 100Kết luận
std::span là một tính năng hữu ích của C++20 giúp làm việc với dãy dữ liệu liên tục an toàn và hiệu quả. Nó giảm chi phí sao chép và mang lại sự linh hoạt khi thao tác dữ liệu trong các container khác nhau. Hãy tận dụng std::span trong các dự án C++20 của bạn để code trở nên gọn gàng và tối ưu hơn.