c++ - 基于for循环访问范围内的指针

标签 c++ c++11 for-loop

我有一个像这样的动态数组包装器模板:

class Wrapper {
  public:
    T* const start;
    T* const end;
    T* begin() const { return start; }
    T* end() const { return end; }
    /*
       more code
    */
};

它通过循环提供值和引用访问:

Wrapper<T> wrapper;
for(auto val : wrapper) {
  //do smth to value
}
for(auto& ref : wrapper) {
  //do smth to reference
}

.我现在想创建一个基于范围的 for 循环,它等效于此:

for(auto ptr = wrapper.start; ptr != wrapper.end; ptr++) {
  //do smth to pointer
}

,即我想要一个基于范围的包装器循环来访问指针。有没有一种方法可以做到这一点,而无需在我的包装器中创建指向指针的指针数组?

编辑:

Dani 在评论中的解决方案已经被指出有效 here .我实际上想知道是否有办法制作以下语法:

for(auto ptr : wrapper) {
  //do smth
}

用作上面的 C 风格 for 循环。

最佳答案

您可以编写自己的自定义迭代器,在取消引用时返回 T*

class iterator {
    T* ptr;
public:
    explicit iterator(T* ptr) : ptr(ptr) {}
    iterator& operator++() {ptr++; return *this;}
    bool operator!=(iterator other) const {return ptr != other.ptr;}
    T* operator*() const {return ptr;}
};

然后从您的 beginend 函数返回此迭代器。

我认为数组包装器的行为有点令人惊讶。

Live demo .

关于c++ - 基于for循环访问范围内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029386/

相关文章:

c++ - 伪装的指针算术 &(array[0])

c++ - 在 C++11 中,使用 std::unique_lock<std::mutex> 作为类成员是否明智(甚至安全)?如果是这样,是否有任何指导方针?

c++ - vector 增长时如何强制执行 move 语义?

时间:2019-05-01 标签:c++: dynamic number of nested for loops (without recursion)

r - R和python中for循环的区别

c++ - 在单元测试中初始化 unique_ptr

c++ - Make 无法匹配目标

C++链接时多次声明函数错误

arrays - 为什么禁止内置 "braced-init-list"中的 "operator[]"?

css - 如何对 Sass for 循环的索引进行零填充?