1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Tối ưu hóa mã R với Rcpp

Connected

Bài tập

Vector trong STL

Standard Template Library (stl) là một thư viện C++ chứa các thuật toán và cấu trúc dữ liệu linh hoạt. Ví dụ, vector kiểu double trong stl tương đương với NumericVector của Rcpp ở dạng "C++ thuần". Đoạn mã sau tạo một vector double chuẩn tên là x với mười phần tử.

std::vector<double> x(10);

Thông thường, bám theo các kiểu vector của Rcpp hợp lý hơn vì bạn có nhiều phương thức tiện lợi hoạt động giống như trong R, bao gồm mean(), round(), và abs(). Tuy vậy, vector của stl có ưu điểm là có thể thay đổi kích thước động mà không phải sao chép dữ liệu mỗi lần. Điều đó cho phép bạn viết mã đơn giản hơn, như hàm "bad" ở bài trước, nhưng vẫn giữ được hiệu năng của mã "good".

Hướng dẫn

100 XP
  • Hoàn thiện định nghĩa select_positive_values_std(), một hàm dựa trên vector của stl để chọn các số dương.
    • Đặt kiểu trả về của hàm là vector double chuẩn dùng std::vector<double>.
    • Khai báo một vector double chuẩn, positive_x, với kích thước 0.
    • Bên trong khối if trong vòng lặp for, dùng push_back() của positive_x để thêm phần tử thứ i của x.
  • good_select_positive_values_cpp() từ bài tập trước đã có sẵn trong workspace của bạn để so sánh. Xem đầu ra trên console để thấy tốc độ tương đối của hai hàm.