c++ - 不能在数组上使用 .begin() 或 .end()

错误显示:

request for member 'begin', 'end' in 'arr' which is non class type int[5], unable to deduce from expression error.

我的代码:

#include <iostream>
using namespace std;

int main()
{
    int * mypointer;

    int arr[5] = {1,3,5,7,9};

    mypointer = arr;

    for(auto it = arr.begin(); it != arr.end(); ++it) {
        cout<<*mypointer<<endl;

        mypointer++;
    }

    return 0;
}

最佳答案

数组没有成员函数,因为它们不是类类型。这就是错误的意思。

您可以使用 std::begin(arr)std::end(arr)来自 <iterator>而是标题。这也适用于 确实 具有 .begin() 的类型和 .end()成员,通过重载:

#include <array>
#include <vector>

#include <iterator>

int main()
{
    int c_array[5] = {};
    std::array<int, 5> cpp_array = {};
    std::vector<int> cpp_dynarray(5);

    auto c_array_begin = std::begin(c_array); // = c_array + 0
    auto c_array_end = std::end(c_array);     // = c_array + 5

    auto cpp_array_begin = std::begin(cpp_array); // = cpp_array.begin()
    auto cpp_array_end = std::end(cpp_array);     // = cpp_array.end()

    auto cpp_dynarray_begin = std::begin(cpp_dynarray); // = cpp_dynarray.begin()
    auto cpp_dynarray_end = std::end(cpp_dynarray);     // = cpp_dynarray.end()
}

https://stackoverflow.com/questions/14595285/

相关文章:

c++ - 有没有办法在 Visual Studio 中获取某些 c++ 函数的调用图?

c++ - 对两个对应的数组进行排序

c++ - 在 C++ 中,是否可以获取函数的返回类型以便在不调用该函数的情况下声明一个变量?

c++ - 如何获得 high_resolution_clock 的精度?

c++ - 为什么 PRIu64 在此代码中不起作用?

c++ - 如何在编译时检查两种类型是否相同(如果它与 Boost strong typedef 一

c++ - 使用 boost::graph 获取特定边缘

c++ - Visual Studio 可以在重建前提示吗?

c++ - 如何以跨平台的方式获取(几乎)唯一的系统标识符?

c++ - 如何检查 STL 迭代器是否指向任何东西?