http://www.cplusplus.com/reference/algorithm/for_each/
Chức năng đơn nhất lấy phần tử trong phạm vi làm đối số. Điều này có thể là con trỏ đến hàm hoặc đối tượng có quá tải lớp học toán tử(). Giá trị trả lại của nó, nếu có, bị bỏ qua.Tại sao for_each không thể sửa đổi đối số functor của nó?
Theo bài viết này, tôi mong rằng for_each thực sự sửa đổi đối tượng được đưa ra làm đối số thứ ba, nhưng có vẻ như for_each hoạt động trên đối tượng tạm thời và thậm chí không sửa đổi đối tượng được cung cấp.
Vì vậy, tại sao nó được triển khai theo cách đó? Nó có vẻ ít hữu ích hơn nhiều. Hoặc tôi đã hiểu sai một cái gì đó và mã của tôi dưới đây có chứa lỗi?
#include <iostream>
#include <vector>
#include <algorithm>
template <class T> struct Multiplicator{
T mresult;
public:
const T& result() const{return mresult;}
Multiplicator(T init_result = 1){
mresult = init_result;
}
void operator()(T element){
mresult *= element;
std::cout << element << " "; // debug print
}
};
int main()
{
std::vector<double> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
Multiplicator<double> multiply;
std::for_each(vec.begin(),vec.end(),multiply);
std::cout << "\nResult: " << multiply.result() << std::endl;
return 0;
}
sản lượng dự kiến:
1 2 3 Result: 6
Nhưng đã sau đầu ra:
1 2 3 Result: 1
Cách thay đổi tiêu đề câu hỏi của bạn? Có thể giúp người khác dễ dàng tìm thấy. – BeeBand