在這里查看std::copy_if細節時,第三個引數是.OutputIterator
template <class InputIterator, class OutputIterator, class UnaryPredicate>
OutputIterator copy_if (InputIterator first, InputIterator last,
OutputIterator result, UnaryPredicate pred);
我有以下代碼 std::back_inserter用作第三個引數。當我在這里查看std::back_inserter詳細資訊時,它并沒有將其提及為.OutputIterator
- 任何類或只是
OutputIterator一種指示任何可以輸出內容的迭代器的方法嗎? - 以某種方式
OutputIterator與ostream_iterator有關嗎? - 為什么這里提到遞增
std::ostream_iterator是無操作的。這是什么意思?這是否意味著我們不能做 onstd::ostream_iterator?
int main()
{
std::vector<int> vec {1, 22, 3, 4, 5, 12, 14};
std::vector<int> rvec;
std::copy_if(std::begin(vec), std::end(vec), std::back_inserter(rvec), [](const int& x){ return (x % 2 == 0);})
}
uj5u.com熱心網友回復:
OutputIterator這是模板引數的僅說明名稱。它沒有特定的功能。
不幸的是,鏈接的站點沒有指定允許哪些型別作為OutputIterator. 如果您取而代之的是cppreference.com頁面std::copy_if,您會看到它指定型別必須是LegacyOutputIterator(又名輸出迭代器)。
這是一個描述型別必須滿足的特定要求才能被允許使用的術語std::copy_if。
輸出迭代器型別只是允許寫入取消參考的迭代器的迭代器型別。有關詳細資訊,請參閱https://en.cppreference.com/w/cpp/named_req/OutputIterator。
在您鏈接的頁面上std::back_inserter,它說它是一個回傳std::back_insert_iterator. 當您std::back_inserter(...)在 的引數串列中使用時std::copy_if,您傳遞給它的是這個回傳的物件,而不是它std::back_inserter本身。
如果您在鏈接頁面上單擊該型別的名稱,您將看到它指定std::back_insert_iterator為LegacyOutputIterator。
因此,它允許在std::copy_if.
std::ostream_iterator也是一個輸出迭代器,因此可用于std::copy_if. 它僅用于“迭代”和寫入std::ostream流。它與std::back_inserter. 它與std::vector任何一個都不相關,并且您沒有在示例中使用它。
這里的“迭代”并不完全正確,因為它并沒有真正迭代任何東西。當寫入取消參考std::ostream_iterator時,它只是將值輸出到關聯的std::ostream. 這就是為什么它說它 是一個noop。沒有什么可以推進它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410782.html
標籤:
上一篇:如何在C 中列印上標3
