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) |
не владеющее представление непрерывной последовательности объектов (шаблон класса) |