gpt4 book ai didi

c++ - std::begin 和 std::end 不能使用指针和引用,为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:41 25 4
gpt4 key购买 nike

为什么 std::begin()std::end() 使用数组而不是指针[这几乎是数组] 和数组的引用[这是原始数组的别名]。

挠头 15 分钟后,我无法在谷歌中得到任何东西。

下面只有第一种情况有效,第二种和第三种情况无效,这可能是什么原因?

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
int first[] = { 5, 10, 15 }; // Fist Case

if (std::find(std::begin(first), std::end(first), 5) != std::end(first)) {
std::cout << "found a 5 in array a!\n";
}

int *second = new int[3]; // Second Case
second[0] = 5;
second[1] = 10;
second[2] = 15;
if (std::find(std::begin(second), std::end(second), 5) != std::end(second)) {
std::cout << "found a 5 in array a!\n";
}

int *const&refOfFirst = first; // Third Case

if (std::find(std::begin(refOfFirst), std::end(refOfFirst), 5) != std::end(refOfFirst)) {
std::cout << "found a 5 in array a!\n";
}
}

错误:

error: no matching function for call to ‘begin(int&)’
if (std::find(std::begin(*second), std::end(*second), 5) != std::end(*second)) {
^

最佳答案

仅给定一个指向数组开头的指针,无法确定数组的大小;所以 beginend 不能处理指向动态数组的指针。

如果您想要一个知道其大小的动态数组,请使用 std::vector。作为奖励,这也将修复您的内存泄漏。

第三种情况失败了,因为您再次使用了(对)指针。您可以使用对数组本身的引用:

int (&refOfFirst)[3] = first;

或者,为了避免指定数组大小:

auto & refOfFirst = first;

beginend 将在这方面发挥作用,就像它们在 first 本身上发挥作用一样。

关于c++ - std::begin 和 std::end 不能使用指针和引用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909429/

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