std::vector<T,Allocator>::data
From cppreference.com
T* data(); |
(1) | (C++11 以降 noexcept) (C++20 以降 constexpr) |
const T* data() const; |
(2) | (C++11 以降 noexcept) (C++20 以降 constexpr) |
要素格納用の基盤となる配列へのポインタを返します。返されるポインタは、コンテナが空の場合でも、範囲 [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 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* に変更されました。 |
[編集] 関連項目
| 最初の要素にアクセスする (public メンバ関数) | |
| 最後の要素にアクセスする (public メンバ関数) | |
| 要素数を返す (public メンバ関数) | |
| 指定された要素にアクセスする (public メンバ関数) | |
| (C++20) |
連続したオブジェクトのシーケンスに対する所有権を持たないビュー (class template) |
| (C++17) |
背後にある配列へのポインタを取得する (function template) |