C++ 带数组视图的指针算法

C++ 带数组视图的指针算法,c++,c++14,array-view,C++,C++14,Array View,我刚刚看过Herb Sutter的“编写良好的C++14…默认情况下”(Writing Good C++14)的第一部分,我有一个关于数组视图的(可能很愚蠢)问题 本案例发送的是数组_视图,而不是指针和长度,以避免指针运算,但是数组_视图如何处理这种情况: int vec[10]; func(vec+2, 5); //start from the 2nd element and process 5 of them array_view是否支持此类内容,或者我只是把用例搞错了?使用array_v

我刚刚看过Herb Sutter的“编写良好的C++14…默认情况下”(Writing Good C++14)的第一部分,我有一个关于数组视图的(可能很愚蠢)问题

本案例发送的是数组_视图,而不是指针和长度,以避免指针运算,但是数组_视图如何处理这种情况:

int vec[10];
func(vec+2, 5); //start from the 2nd element and process 5 of them
array_view是否支持此类内容,或者我只是把用例搞错了?

使用array_view,您可以执行以下操作:

const char* str = "hello world!"; 
func(std::experimental::string_view(str + 2, 5));
也就是说,使用视图的一个构造函数从子字符串构建它

因此,使用
array\u view
您可能可以做到这一点:

int vec[10];
func(std::experimental::array_view(vec + 2, 5));
注意:从c++14开始,似乎没有任何正式的
数组视图

使用,您可以执行以下操作:

const char* str = "hello world!"; 
func(std::experimental::string_view(str + 2, 5));
也就是说,使用视图的一个构造函数从子字符串构建它

因此,使用
array\u view
您可能可以做到这一点:

int vec[10];
func(std::experimental::array_view(vec + 2, 5));
注意:从c++14开始,似乎没有任何正式的
数组视图。

首先,您可以从

正如您在
#8
#10
中所看到的,您可以编写以下内容:

首先,你可以从

正如您在
#8
#10
中所看到的,您可以编写以下内容:


这难道不违背数组视图的全部目的吗?据我所知,之所以使用它,是因为如果我们跨越数组的边界,就会给出一个编译错误,这样更安全。像这样使用它(array_view(vec+2,5)),我们可以在构建array_view之前跨越数组的边界。@Andrei在构建array_view之前,您不会获得
的好处。在构建
array\u视图时
有一个数组,因此可以处理数组的优缺点。当进入
func
时,虽然你有一个更安全的数组抽象视图。我想你是对的。如果在
array\u视图
中有一个
offset
参数就好了,这样我们就可以安全地构造它了。这不是违背了array\u视图的全部目的吗?据我所知,之所以使用它,是因为如果我们跨越数组的边界,就会给出一个编译错误,这样更安全。像这样使用它(array_view(vec+2,5)),我们可以在构建array_view之前跨越数组的边界。@Andrei在构建array_view之前,您不会获得
的好处。在构建
array\u视图时
有一个数组,因此可以处理数组的优缺点。当进入
func
时,虽然你有一个更安全的数组抽象视图。我想你是对的。在
array\u view
中有一个
offset
参数会很好,这样我们就可以安全地构造它了。谢谢你的回复,我还不知道呢!正如我之前告诉Drax的,现在我看到代码< FUNC({VEC+2, 5 })是最好的方法,但我仍然认为在ArayyVIEW中有一个偏移参数是很好的,因此我们可以以更安全的方式构造它。如果数组有3个元素,我做了
func({vec+4,5})
,我猜它仍然是一个运行时错误,但是如果调用类似
func({vec,4,5})
,它可能是一个编译时错误。无需猜测,如果需要,可以在线测试;)(参见“在线运行!”按钮)感谢回购,我不知道!正如我之前告诉Drax的,现在我看到代码< FUNC({VEC+2, 5 })是最好的方法,但我仍然认为在ArayyVIEW中有一个偏移参数是很好的,因此我们可以以更安全的方式构造它。如果数组有3个元素,我做了
func({vec+4,5})
,我猜它仍然是一个运行时错误,但是如果调用类似
func({vec,4,5})
,它可能是一个编译时错误。无需猜测,如果需要,可以在线测试;)(参见“在线运行!”按钮)