tôi đang tìm kiếm tại generate()
và generate_n()
trong cppreference và đang cố gắng tìm hiểu tại sao generate()
đòi hỏi ForwardIterator
, trong khi đòi hỏi generate_n()
OutputIterator
cho phạm vi? (Tôi đã kiểm tra dự thảo làm việc mới nhất của Standard, và đó là yêu cầu tương tự.)Tại sao std :: generate() và std :: generate_n() yêu cầu các trình lặp khác nhau?
Bởi vì, ít nhất là thực hiện khác nhau của họ dường như đòi hỏi các khái niệm iterator giống hệt nhau và OutputIterator
có vẻ là đủ:
generate()
:
template<class ForwardIt, class Generator>
void generate(ForwardIt first, ForwardIt last, Generator g)
{
while (first != last) {
*first++ = g();
}
}
generate_n()
:
template<class OutputIt, class Size, class Generator>
OutputIt generate_n(OutputIt first, Size count, Generator g)
{
for (Size i = 0; i < count; i++) {
*first++ = g();
}
return first;
}
Cùng với câu chuyện std::fill()
và std::fill_n()
.