std::vector<T,Allocator>::data
| (1) | ||
T* data(); |
(до C++11) | |
T* data() noexcept; |
(с C++11) (constexpr с C++20) |
|
| (2) | ||
T* data(); |
(до C++11) | |
const T* data() const; |
(с C++11) (constexpr с C++20) |
Возвращает указатель на базовый массив, используемый для хранения элементов. Указатель таков, что диапазон [data(), data() + size()) всегда является валидным диапазоном, даже если контейнер пустой (data() в этом случае не может быть разыменован).
Параметры
(нет)
Значение возврата
Указатель на базовый массив элементов. Для непустых контейнеров возвращаемый указатель равен адресу первого элемента.
Сложность
Постоянная.
Примечания
Если size() равно 0, data() может или не может вернуть нулевой указатель.
Пример
#include <cstddef>
#include <iostream>
#include <span>
#include <vector>
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::vector<int> container{1, 2, 3, 4};
// Prefer container.data() over &container[0]
pointer_func(container.data(), container.size());
// std::span (C++20) 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++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 464 | C++98 |
vector не имело этой функции-члена |
добавленная |
| LWG 1312 | C++98 | тип возвращаемого значения был pointer и const_pointer |
изменён на T* и const T* соответственно |
См. также
| доступ к первому элементу (публичный метод-член) |
|
| доступ к последнему элементу (публичный метод-член) |
|
| возвращает количество элементов (публичный метод-член) |
|
|
(C++20) |
представление без владения над непрерывной последовательностью объектов (шаблон класса) |
|
(C++17) |
получает указатель на базовый массив (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/vector/data