gpt4 book ai didi

C++11 对动态数组使用 "Range-based for loop"(对于每个)

转载 作者:太空狗 更新时间:2023-10-29 20:24:37 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

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 代替。

关于C++11 对动态数组使用 "Range-based for loop"(对于每个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com