Khi tôi cố gắng sử dụng for_each
Khi thay đổi một vectơ tại chỗ:
vector sub_accs_ind(vec_ids_.size());
std::for_each(sub_accs_ind.begin(), sub_accs_ind.end(), [](bool& b){ b = false; });
nó dẫn đến lỗi /usr/include/c++/4.8/bits/STL_algo.h:4417:14: error: không khớp với cuộc gọi đến '(main(int, char * const*)::__lambda3) (std::_Bit_iterator::reference) '
__f(*__đầu tiên);
Bạn có thể cho tôi biết có chuyện gì ở đây không?
std::vector
không phải là một thùng chứa !
trình vòng lặp của nó không trả về bool&
, nhưng là một phiên bản proxy. Trong C++11, bạn phải đặt tên loại của nó một cách rõ ràng:
std::for_each(
sub_accs_ind.begin(),
sub_accs_ind.end(),
[](decltype(sub_accs_ind)::reference b){ b = false }
);
C++14 cho phép bạn khai báo các tham số dưới dạng auto&&
để chứa các tài liệu tham khảo và proxy thực sự.
Tôi là một lập trình viên xuất sắc, rất giỏi!