我有一个随机访问迭代器的循环。典型的用法是 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)
}
}
如果函数被调用时 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);
}
}
关于c++ - 将初始值设定项移动到 for 循环中的条件后面的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430659/