c++ - 将初始值设定项移动到 for 循环中的条件后面的优雅方法

标签 c++

我有一个随机访问迭代器的循环。典型的用法是 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_TYPEVT没有空的构造函数。我可以放一个 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/

相关文章:

c++ - SDL基本程序不工作但代码没问题

c++ - fscanf 中的 Exc_bad_access 错误

c++ - Global const string& 对我来说很难闻,它真的安全吗?

c++ - 用结构修改 protected 值

c++ - 从函数返回 STL 容器

c++ - 这个指针和方括号重载

c++ - 如何将回调与 QPlainTextEdit 更改连接起来?

c++ - Do...While 循环可能带有临时变量的 if ...else 语句

c++ - OpenCV findcontours 为每个圆返回 2 个轮廓

c++ - 如何在 C++ 中返回文件名?