gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:04 24 4
gpt4 key购买 nike

我正在尝试使用 std::reverse 来反转数组的一部分,它需要两个迭代器。当我尝试按如下方式构造迭代器时:

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

我得到一个错误:

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));

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

最佳答案

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

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

要解决您的问题,只需摆脱对 std::beginstd::end 的调用:

std::reverse(a+2, a+4);

这是有效的,因为指针满足迭代器的所有要求,所以从 a+2a+4 产生的指针完全有效传递给 std::reverse.

关于c++ - 如何在数组中间构造开始和结束迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56100498/

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