不,我喜歡你的方法,但如果int
是有問題begin()
和迭代器之間的距離,你可以使用
c.begin() + int_value
或
std::advance(c.begin(), int_value)
得到ŧ他迭代器。對於不是隨機訪問迭代器的迭代器需要第二個版本。爲了您的個人理智(以及程序的速度),我建議您以某種形式直接返回迭代器。
有很多可能的接口來解決這種或那種方式。我會叫什麼 「舊的C辦法」 將通過出參數返回:
bool find_stuff(stuff, container::iterator* out_iter) {
...
if(found && out_iter)
*out_iter = found_iter;
return found;
}
使用它:
container::iterator the_iter;
if(find_stuff(the_stuff, &the_iter)) ...
或
if(find_stuff(the_stuff, 0)) // if you don't need the iterator
這不是地道的C++,但萊納斯會很高興。
第二種可能的和理論上的聲音版本使用類似boost::optional
的東西來返回值。通過這種方式,您可以返回某個值或不返回。
boost::optional<container::iterator> find_stuff(stuff) {
...
if(found && out_iter)
return found_iter;
return boost::none;
}
用途:
boost::optional<container::iterator> found = find_stuff(the_stuff);
if(found) {
do something with *found, which is the iterator.
}
或
if(find_stuff(the_stuff)) ...
三可能的解決方案會去的std::set::insert
方式,即。返回一對由標誌和值:
std::pair<bool, container::iterator> find_stuff(stuff) {
...
return std::make_pair(found, found_iter);
}
用途:
std::pair<bool, container::iterator> found = find_stuff(the_stuff);
if(found.first) ...
您自定義的'find'方法可能會使用迭代器來判斷項目是否存在;只要使用該迭代器,如果它被發現。 – tmpearce
@tmpearce如果我的函數會返回一個迭代器,我怎麼知道,如果這對沒有退出? – Kolyunya
不會'std :: set>'是一個更合適的容器嗎? –