C++ 查找、反向查找或直接查找取决于参数、优雅的方式

C++ 查找、反向查找或直接查找取决于参数、优雅的方式,c++,stl,C++,Stl,在STL容器中,还有什么比这更优雅的依赖方向搜索的方法 iterator i; if ( condition ) i = std::find( begin, end, value ); else i = std::find( rbegin, rend, value ).base(); 没有C++11,不允许使用boost 谢谢。如果允许boost,您可以使用boost::range和。这是一个很好的例子,其中范围可以真正优于迭代器。三元运算符?为什么你的变种不好?你用什么条件来决定方

在STL容器中,还有什么比这更优雅的依赖方向搜索的方法

iterator i;

if ( condition )
  i = std::find( begin, end, value );
else
  i = std::find( rbegin, rend, value ).base();
没有C++11,不允许使用boost


谢谢。

如果允许boost,您可以使用
boost::range
和。这是一个很好的例子,其中范围可以真正优于迭代器。

三元运算符?为什么你的变种不好?你用什么条件来决定方向?@ForEveR:我不认为我的变体不好,只是想知道是否有更好的。三元运算符使这段代码的可读性降低了,我想。@ForEveR:就可读性而言。我不认为这个问题很紧急,我的变体也是可读的。我怎么能把这两个结果都分配给<代码>它< /代码>?我认为第一个结果是
迭代器
,第二个结果是
反向迭代器
?为什么要使用保留迭代器作为输入参数返回保留迭代器,我在
std::find()
@MarsonMao:
std::find
中找不到此方法。请给出一些使用
boost::range
的示例?根据我对
boost::range
的尝试,我必须根据原始容器迭代器创建两种不同类型的迭代器范围,
boost::find
返回两种不同的迭代器类型,因此我没有统一类型的返回迭代器。我说得对吗?我现在不太清楚该怎么做。我建议你仔细阅读一下
范围
文档和示例,如果你真的想使用它,最后再发布一个关于这个的问题。我想说,这还是一种实验。