Chức năng mẫu iota đã được thêm vào thư viện chuẩn để điền vào một phạm vi trình lặp với một chuỗi các giá trị ngày càng tăng.Tại sao họ không thêm phiên bản nhà khai thác của iota?
template<typename ForwardIterator, typename Tp>
void
iota(ForwardIterator first, ForwardIterator last, Tp value)
{
for (; first != last; ++first)
{
*first = value;
++value;
}
}
Hầu hết các mẫu khác trong số <numeric>
đều có phiên bản chấp nhận nhà khai thác do người dùng chỉ định. Có điều này:
template<typename ForwardIterator, typename Tp, typename Operator>
void
iota(ForwardIterator first, ForwardIterator last, Tp value, Operator op)
{
for (; first != last; ++first)
{
*first = value;
op(value);
}
}
sẽ thuận tiện nếu bạn không muốn (hoặc không thể) quá tải toán tử ++() cho Tp. Tôi sẽ tìm thấy phiên bản này rộng rãi hơn có thể sử dụng hơn so với phiên bản mặc định toán tử ++(). <
Bạn nói đúng, với lambdas phiên bản thứ hai không chỉ linh hoạt hơn phiên bản đầu tiên mà hầu như dễ sử dụng để tăng thêm. –