C++11使用“范围for循环”(for each)遍历动态数组

3
如果我有一个静态数组,我可以像这样做:
int a[] = {1, 2, 3};
for (const auto x: a) {printf("%d\n", x);} 

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

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

我也不想使用std :: for_each,但这是一种选择。


一个“老式”的普通for循环? - deviantfan
1
为什么不使用 std::vector 代替指针和大小作为单独的项呢? - Jerry Coffin
不行,因为命名空间的一个古怪细节,即使可能,循环也不知道动态数组的大小。相关链接:https://dev59.com/MYfca4cB1Zd3GeqPiWhT - alfC
1个回答

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 << ", ";**

演示.

使用C++1Z,我们有望能够使用std::array_view


1
数组视图将如何使用? - user972014

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接