如何在数组中间构造开始和结束迭代器?

Adi*_*tya 1 c++ reverse iterator std

我正在尝试使用需要两个迭代器的std :: reverse将数组的一部分反转到位。当我尝试如下构造迭代器时:

int a[] = {0, 1, 2, 3, 4, 5, 6};
reverse(begin(a + 2), end(a + 4));
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

template argument deduction/substitution failed:
test.cpp:8:33: note:   mismatched types ‘const std::valarray<_Tp>’ and ‘int*’ reverse(begin(a + 2), end(a + 4));
Run Code Online (Sandbox Code Playgroud)

构造迭代器的正确方法是什么?

Mil*_*nek 5

std::beginstd::end是接受容器并为您提供分别指向第一个和最后一个元素的迭代器的函数。

std::begin并且std::end它们本身不是迭代器,并且它们不适用于原始指针,因为指针没有任何大小信息。调用时std::begin(a+2)a衰减为指向其第一个元素的指针,并移动2个元素。结果指针将传递给std::begin,但std::begin不适用于指针,因此结果是编译失败。

为了解决你的问题,只是摆脱调用的std::beginstd::end

std::reverse(a+2, a+4);
Run Code Online (Sandbox Code Playgroud)

因为指针这个工程符合所有的迭代器的要求,所以从产生的指针a+2a+4完全有效的传递给std::reverse