std :: vector作为原始数组

std::vector as raw array

本文关键字:原始 数组 vector std      更新时间:2023-10-16

可以安全地获取std::vector中的第一个元素的地址并像原始数组一样使用它?数据是否持续对齐?什么C 标准说(c++98c++11)?顺便说一句,这是一种常见的做法吗?

我有一些数组,大小可能会有所不同,功能将指针和元素数量作为参数。使用std::vector管理数据并同时将其用于my_func

std::vector<int> my_vector;
void my_func(int* int_ptr, int num_ints);
// ..
my_func(&my_vector[0], my_vector.size());

c 11(和此功能的C 03)保证 std::vector中的数据是连续的。这意味着,在您的情况下,可以将&my_vector[0]视为指向该数组和正常指针算术的零元素的指针,可用于访问其他元素。首选使用my_vector.data()恢复指向零元素的指针。

c 98 几乎保证 it。

请注意,对于任何C 标准,std::vector<bool>不是 true。这是因为std::vector<bool>被实现为特定的专业化。