T* data(); // (1) C++03
T* data() noexcept; // (1) C++11
constexpr T* data() noexcept; // (1) C++20
const T* data() const; // (2) C++03
const T* data() const noexcept; // (2) C++11
constexpr const T* data() const noexcept; // (2) C++20
概要
配列の先頭へのポインタを返す。
vector
が空の場合であっても、この関数の呼び出し自体は問題なく行える。ただし、その戻り値については規定されていないため、間接参照を行うと未定義動作になる。
戻り値
[data(), data() + size())
が適正な範囲になるようなポインタ。
- C++11 : 空ではない
vector
に対してはdata() == &front()
となる - C++17 : 空ではない
vector
に対してはdata() == addressof(front())
となる
計算量
定数時間
例
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4};
int* p = v.data();
std::cout << *p << std::endl;
++p;
std::cout << *p << std::endl;
}
出力
3
1
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: 2010 ✅, 2012 ✅, 2013 ✅
備考
gcc 4.8.2 の時点で libstdc++ の実装にはバグがあり、vector
が空の場合に data()
を呼び出すと未定義動作になる。(Bug 59829)。gcc 4.9.0で修正されている。