std::vector<T,Allocator>::data
来自cppreference.com
<tbody>
</tbody>
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) // 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 相比分开的指针/大小是更安全的选择。
span_func({container.data(), container.size()});
}
输出:
data = 1 2 3 4
data = 1 2 3 4
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 464 | C++98 | vector 没有这个成员函数
|
添加该函数 |
| LWG 1312 | C++98 | 返回类型是 pointer 和 const_pointer
|
分别改成 T* 和 const T*
|
参阅
| 访问第一个元素 (公开成员函数) | |
| 访问最后一个元素 (公开成员函数) | |
| 返回元素数 (公开成员函数) | |
| 访问指定的元素 (公开成员函数) | |
(C++20) |
连续的对象序列上的无所有权视图 (类模板) |
(C++17) |
获得指向底层数组的指针 (函数模板) |