std::array<T,N>::data

来自cppreference.com
< cpp‎ | container‎ | array

T* data() noexcept;
(C++11 起)
(C++17 前)
constexpr T* data() noexcept;
(C++17 起)
const T* data() const noexcept;
(C++11 起)
(C++17 前)
constexpr const T* data() const noexcept;
(C++17 起)

返回指向作为元素存储工作的底层数组的指针。返回的指针使得范围 [data()data() + size()) 始终是有效范围,即使容器为空(此时 data() 不可解引用)。

参数

(无)

返回值

指向底层元素存储的指针。对于非空容器,返回的指针与首元素地址比较相等。

复杂度

常数。

注解

如果 size()0,那么 data() 有可能会也有可能不会返回空指针。

示例

#include <cstddef>
#include <iostream>
#include <span>
#include <array>
 
void pointer_func(const int* p, std::size_t size)
{
    std::cout << "data = ";
    for (std::size_t i = 0; i < size; ++i)
        std::cout << p[i] << ' ';
    std::cout << '\n';
}
 
void span_func(std::span<const int> data) // C++20 起
{
    std::cout << "data = ";
    for (const int e : data)
        std::cout << e << ' ';
    std::cout << '\n';
}
 
int main()
{
    std::array<int, 4> container{1, 2, 3, 4};
 
    // container.data() 优于 &container[0]
    pointer_func(container.data(), container.size());
 
    // std::span (C++20) 相比分开的指针/大小是更安全的选择。
    span_func({container.data(), container.size()});
}

输出:

data = 1 2 3 4 
data = 1 2 3 4


参阅

(C++11)
访问第一个元素
(公开成员函数)
(C++11)
访问最后一个元素
(公开成员函数)
(C++11)
返回容纳的元素数
(公开成员函数)
(C++20)
对象的连续序列上的无所有权视图
(类模板)
(C++17)
获得指向底层数组的指针
(函数模板)