std::vector<T,Allocator>::data

From cppreference.com
< cpp‎ | container‎ | vector

 
 
 
 
T* data();
(1) (noexcept since C++11)
(constexpr since C++20)
const T* data() const;
(2) (noexcept since C++11)
(constexpr since C++20)

Returns a pointer to the underlying array serving as element storage. The pointer is such that range [data()data() + size()) is always a valid range, even if the container is empty (data() is not dereferenceable in that case).

Parameters

(none)

Return value

Pointer to the underlying element storage. For non-empty containers, the returned pointer compares equal to the address of the first element.

Complexity

Constant.

Notes

If size() is 0, data() may or may not return a null pointer.

Example

#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 is a safer alternative to separated pointer/size.
    span_func({container.data(), container.size()});
}

Output:

data = 1 2 3 4
data = 1 2 3 4

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 464 C++98 vector did not have this member function added
LWG 1312 C++98 the return type were pointer and const_pointer changed to T* and const T* respectively

See also

access the first element
(public member function)
access the last element
(public member function)
returns the number of elements
(public member function)
access specified element
(public member function)
(C++20)
a non-owning view over a contiguous sequence of objects
(class template)
(C++17)
obtains the pointer to the underlying array
(function template)