我在随机访问迭代器上有一个循环.典型的用法是end()是过去的,不应该被解除引用,所以我需要在开始初始化东西之前执行条件.这是我的具体代码:
template <typename RAI>
void foo(RAI begin, RAI end) {
typedef typename std::iterator_traits<RAI>::value_type VT;
SOME_TYPE<VT> key = SOME_TYPE<VT>(*begin);
while (begin != end) {
do_stuff(key);
do_more_stuff(key);
key = SOME_TYPE<VT>(*++begin)
}
}
Run Code Online (Sandbox Code Playgroud)
如果在函数被调用时begin == end,那么我最终取消引用end,这是我可能不拥有的内存空间.我不能宣布SOME_TYPE<VT> key;如果任一SOME_TYPE或VT没有空的构造函数.我可以if...then在开始时放一个,但这看起来很......丑陋.有没有更好的办法?
你能不能这样做吗?
template <typename RAI>
void foo(RAI begin, RAI end) {
typedef typename std::iterator_traits<RAI>::value_type VT;
for (; begin != end; ++begin) {
SOME_TYPE<VT> key = SOME_TYPE<VT>(*begin);
do_stuff(key);
do_more_stuff(key);
}
}
Run Code Online (Sandbox Code Playgroud)