当需要数组时,将指针传递到向量中的第一个元素是否安全
Is it safe to pass a pointer to the first element in a vector when an array is expected?
可能重复:
我可以用std::vector调用接受数组/指针参数的函数吗?
我最近遇到了这样的东西:
class X {
public: void foo(float* p, int elements);
};
=一个需要浮点值数组的方法。
但在示例代码中,他们就是这样使用的:
std::vector<float> bar;
bar.push_back(42);
// ...
X x;
x.foo( &bar[0], (int)bar.size() );
现在我想知道这是一个安全的方法,还是恰好适用于std::vector
的大多数实现?(也许这是一个运算符重载的问题?我对这些东西还没有那么自信。)
n3337 23.3.6.1/1。在C++03标准中,这是23.2.4/1
向量是一个支持随机访问迭代器的序列容器。此外,它支持(摊销)在结束时进行恒定时间的插入和擦除操作;中间的插入和擦除需要线性时间。存储管理是自动处理的,尽管可以提供提示以提高效率向量是连续存储的,这意味着如果v是一个向量,其中T是其他类型则它服从恒等式&v[n]==&v[0]+n对于所有0<=n<v.大小()。
是的,这是允许的,并且将如Forever所指出的那样工作。然而,只有在注意不要删除向量和在数组中留下悬空指针的情况下,它才是安全的。由于您在数组和向量之间共享内存,因此由您来管理该内存。
从这里开始:
因此,它们的元素是按照严格的线性序列排序的。
使用该定义和元素访问运算符([]),表达式&avector[0]
获得第一个元素的地址,接下来的元素是它之后的连续序列。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 如何将正则表达式向量与一个字符串匹配?
- 为什么第一个Dynamic_cast没有投射到基类?
- 从 c++ 中的字符串向量创建一个元组
- 按另一个向量对一个向量进行排序
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 获取不等于特定值的向量的第一个N元素