C ++ 11使用"基于范围的循环" (对于每个)动态数组

时间:2014-12-06 18:42:03

标签: c++ arrays c++11 foreach std

如果我有静态数组,我可以这样做:

int a[] = {1, 2, 3};
for (const auto x: a) {printf("%d\n", x);} 

当我有一个指针(int * b)和数组大小(N)时,我可以做类似的事情吗?

我宁愿避免定义自己的begin()和end()函数。

我也不想使用std :: for_each,但它是一个选项。

1 个答案:

答案 0 :(得分:6)

只需使用类似容器的包装器:

template <typename T>
struct Wrapper
{
    T* ptr;
    std::size_t length;
};

template <typename T>
Wrapper<T> make_wrapper(T* ptr, std::size_t len) {return {ptr, len};}

template <typename T>
T* begin(Wrapper<T> w) {return w.ptr;}

template <typename T>
T* end(Wrapper<T> w) {return begin(w) + w.length;}

用法:

for (auto i : make_wrapper(a, sizeof a / sizeof *a))
    std::cout << i << ", ";**

Demo

使用C ++ 1Z,我们希望能够使用std::array_view代替。