c++ - 获取指向容器末尾的原始指针

标签 c++ pointers iterator segmentation-fault containers

如果我有一个容器的 end iterator,但我想得到一个指向它的原始指针,有没有办法实现这个?

假设我有一个容器:foo。例如,我不能这样做:&*foo.end() 因为它会产生运行时错误:

Vector iterator not dereferencable

我可以做到这一点,但我希望有一种更简洁的方法:&*foo.begin() + foo.size()

编辑:

这不是关于如何将迭代器转换为一般指针的问题(显然这是问题所在),而是如何具体地将结束迭代器转换为指针。 "duplicate" question中的答案实际上建议取消引用迭代器。结束迭代器不能在没有段错误的情况下被取消引用。

最佳答案

访问存储结束的正确方法是:

v.data() + v.size()

这是因为*v.begin()v为空时无效。

为所有连续容器(vectorstringarray)提供了成员函数data

从 C++17 开始,您还可以使用非成员函数:

data(v) + size(v)

这也适用于原始数组。

关于c++ - 获取指向容器末尾的原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073700/

相关文章:

c++ - 具有非恒定大小的字符串数组的模棱两可的编译?

c++ - Boyer Moore - 坏字符规则实现子串搜索

c++ - vector 迭代器参数作为模板 C++

c++ - const 类型没有可行的重载 operator[]

c - 如何使用指针传递结构的二维数组

c - C 中神秘的(我认为)缓冲区溢出

c - 我们如何在具有两个不同指针的同一结构中进行类型定义? _t 这个词是做什么的?

c++ - 在迭代 map 时向/从 map 添加/删除元素是否安全

c++ - 移动 vector 会使迭代器无效吗?

python - Swig 从 Base* 向下转型到 Derived*