std::array::data
Материал из cppreference.com
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) |
предоставляет доступ к первому элементу (public функция-элемент) |
(C++11) |
предоставляет доступ к последнему элементу (public функция-элемент) |
(C++11) |
возвращает количество элементов (public функция-элемент) |
(C++20) |
не владеющее представление непрерывной последовательности объектов (шаблон класса) |