std::array<T,N>::data
T* data() noexcept; | (1) |
(начиная с C++11) (constexpr начиная с C++17) |
const T* data() const noexcept; | (2) |
(начиная с C++11) (constexpr начиная с 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) // since 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};
// Prefer container.data() over &container[0]
pointer_func(container.data(), container.size());
// std::span is a safer alternative to separated pointer/size.
span_func({container.data(), container.size()});
}
Вывод:
data = 1 2 3 4 data = 1 2 3 4
См. также
| доступ к первому элементу (открытая функция-член) |
|
| доступ к последнему элементу (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
|
| доступ к указанному элементу (открытая функция-член) |
|
|
(C++20) | невладеющее представление непрерывной последовательности объектов (шаблон класса) |
|
(C++17) | получает указатель на внутренний массив (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/array/data