Ala*_*ing 1 c++ boost iterator stl range
我声明了一个vector<Bla> blaVec并写了一个函数:
template<typename Iterator>
void doSomething(Iterator first, Iterator last) { ... }
Run Code Online (Sandbox Code Playgroud)
然后我用以下方法调用此函数blaVec:
doSomething(blaVec.begin(), blaVec.end());
Run Code Online (Sandbox Code Playgroud)
但是,我真的想要更短的东西,doSomething(blaVec)但无需vector在函数定义中指定.基本上,是否有一种很好的标准方法来指定第一个迭代器或者一些[begin,end]迭代器,就像Boost.Range所做的那样.
我是一个算法人员,所以我真的不想进入过于通用的复杂解决方案.我大部分时间都写过这样的函数:
void doSomething(vector<int> & bla) { ... }
Run Code Online (Sandbox Code Playgroud)
然而,这些天来,我经常写doSomething的是运行在list和deque和vector这样一个稍微更通用的解决方案是要求,这就是为什么我用迭代器去.但它似乎过于冗长的解决方案.你有什么建议?
Naw*_*waz 11
如果你发现那么详细,那么你可以用这个包装:
template<typename Container>
void doSomething(Container &c)
{
doSomething(c.begin(), c.end()); //internally call the iterator version.
}
Run Code Online (Sandbox Code Playgroud)
并使用此函数,而不是迭代器版本.
此外,当您不希望该函数对容器中的所有元素进行操作时,您可以使用迭代器版本.例如,
doSomething(c.begin(), c.begin() + 5); //operate on first 5 elements
//assuming c.begin()+5 makes sense
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |