使用reverse_iterator
和std::equal
合法嗎?std ::等於reverse_iterator
例如,這些是否合法?
std::equal(v.begin(), v.end(), w.rbegin())
std::equal(v.rbegin(), v.rend(), w.begin())
std::equal(v.rbegin(), v.rend(), w.rbegin())
使用reverse_iterator
和std::equal
合法嗎?std ::等於reverse_iterator
例如,這些是否合法?
std::equal(v.begin(), v.end(), w.rbegin())
std::equal(v.rbegin(), v.rend(), w.begin())
std::equal(v.rbegin(), v.rend(), w.rbegin())
全部都是有效的,因爲反向迭代器是,其實前向迭代器。
「反向迭代器」不是迭代器類別。 記住一些迭代器分類:
*
)和遞增(++
)迭代器是一個正向迭代器。+
和-
運算符。另一方面,反向迭代器是一個雙向迭代器或隨機訪問迭代器,它以反向方式查看集合。看看
http://www.cplusplus.com/reference/std/iterator/reverse_iterator/
...尤其是它在「會員類型」的標題說,有關的iterator_category。
[請不要鏈接到cplusplus.com](http://programmers.stackexchange.com/q/88241/33100); cppreference.com要好得多。 – ildjarn
所有的是,是什麼讓你覺得不然? – Xeo
@Xeo:http://www.cplusplus.com/reference/algorithm/equal/在參數下表示它接受前向迭代器,並沒有提到反向迭代器。 –
@trinithis:http://en.cppreference.com/w/cpp/iterator/reverse_iterator表示'std :: reverse_iterator <>'繼承了底層迭代器的迭代器類別,它用於'std :: vector <>'是隨機訪問,這是一個前鋒的超集。 – ildjarn