std::array::data
Материал из cppreference.com
T* data()noexcept; | (начиная с C++11) (до C++17) | |
constexpr T* data()noexcept; | (начиная с C++17) | |
const T* data()constnoexcept; | (начиная с C++11) (до C++17) | |
constexprconst T* data()constnoexcept; | (начиная с C++17) | |
Возвращает указатель на внутренний массив, выступающий в качестве хранилища элементов. Указатель таков, что диапазон [data(); data() + size())
всегда корректный, даже если контейнер пуст (Указатель data()
в таком случае не может быть разыменован).
Содержание |
[править]Параметры
(нет)
[править]Возвращаемое значение
Указатель на внутренний массив. Для непустых контейнеров, возвращаемый указатель является равным адресу первого элемента.
[править]Сложность
Константная.
[править]Примечания
Если size() равен 0, не гарантируется, что data() вернёт нулевой указатель.
[править]Пример
Запустить этот код
#include <cstddef>#include <iostream>#include <span>#include <array> void pointer_func(constint* 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<constint> data)// Начиная с C++20{std::cout<<"data = ";for(constint 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) | не владеющее представление непрерывной последовательности объектов (шаблон класса) |