最終更新日時(UTC):
が更新

履歴 編集

function
<vector>

std::vector::data

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

処理系

備考

gcc 4.8.2 の時点で libstdc++ の実装にはバグがあり、vector が空の場合に data() を呼び出すと未定義動作になる。(Bug 59829)。gcc 4.9.0で修正されている。

参照