如果我有一个容器的 end
iterator
,但我想得到一个指向它的原始指针,有没有办法实现这个?
假设我有一个容器:foo
。例如,我不能这样做:&*foo.end()
因为它会产生运行时错误:
Vector iterator not dereferencable
我可以做到这一点,但我希望有一种更简洁的方法:&*foo.begin() + foo.size()
。
编辑:
这不是关于如何将迭代器转换为一般指针的问题(显然这是问题所在),而是如何具体地将结束迭代器转换为指针。 "duplicate" question中的答案实际上建议取消引用迭代器。结束迭代器不能在没有段错误的情况下被取消引用。
最佳答案
访问存储结束的正确方法是:
v.data() + v.size()
这是因为*v.begin()
在v
为空时无效。
为所有连续容器(vector
、string
和array
)提供了成员函数data
。
从 C++17 开始,您还可以使用非成员函数:
data(v) + size(v)
这也适用于原始数组。
关于c++ - 获取指向容器末尾的原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073700/