2013-07-03 36 views
1

我有一個要求,我要窺探下一個迭代器位置,看看它是否是容器的末端。由於C++ 11尚未採用,因此我無法使用std::next。我可以使用boost::next作爲一個確切的選擇嗎?謝謝boost :: next和std :: next是否相等?

+0

標準庫中的許多新C++ 11功能都是在它們的Boost等價物之後建模的。所以沒有看任何文件,我會說它應該工作。 –

+1

[boost :: next](http://www.boost.org/doc/libs/1_54_0/libs/utility/utility.htm#functions_next_prior)vs [std :: next](http://en.cppreference。 COM/W/CPP /迭代器/未來)。所以是的。 –

+1

當你嘗試過時發生了什麼?文件說什麼? –

回答

1

如果它不按預期工作,我會感到驚訝。如果有疑問,你可以隨時使用std::advance

some_container c; 
some_container::iterator it; 
std::advance(it, 1); 
bool b = it == c.end(); 
0

沒有一般。如果你將它用於迭代器(這是假設的使用),可能是肯定的。

我說一般的原因是因爲,如果參數類不是迭代器,則在第二個(默認)參數中有std::nextiterator_traits<...>)中的替換錯誤。所以以前與boost::next一起使用的東西可能不再適用於std::next

例如,我曾經使用boost::next來處理非迭代器但定義了operator++(但不是二元運算符)的類。通常我想要生成下一個元素,並且boost::next對此非常合適。

struct myint{ 
    int impl; 
    myint& operator++(){impl++; return *this;} 
} 

boost::next作品與此類但std::next沒有。所以,我必須堅持做一個副本並增加或回落到boost::next(或者甚至最壞,爲不是迭代器的東西生成iterator_trait)。

我與std::next的問題是第二個參數(與difference_type有關)對參數施加了不必要的限制。但我可能是濫用功能::next的錯誤。

相關問題