std::vector::data — cppreference.com
Пространства имён
Варианты
Действия

std::vector::data

Материал из cppreference.com
 
 
 
 
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
T* data() noexcept;
(начиная с C++11)
(до C++20)
constexpr T* data() noexcept;
(начиная с C++20)
const T* data() const noexcept;
(начиная с C++11)
(до C++20)
constexpr const T* data() const noexcept;
(начиная с 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) // Начиная с 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 };

    // Использование 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

См. также