C ++:为什么引入std :: vector :: data成员函数?

时间:2019-02-13 04:37:38

标签: c++ c++11 vector stl member-functions

我从下面的链接中查看STL的向量容器。并提到,vector::data是随C ++ 11添加到此容器的新成员函数之一,它返回指向内部使用的内存阵列的指针。

http://www.cplusplus.com/reference/vector/vector/data/

上面链接中给出的示例代码也显示了它的用法,但是似乎所有这些事情也可以通过迭代器完成。

引入此成员函数是否有任何特定原因?

2 个答案:

答案 0 :(得分:2)

来自评论:

  • std :: vector是ContiguousContainer,可以通过指针进行访问。
  • 类似C的函数可能需要
  • 通过指针进行访问

存在失败的可能性:

  • 删除指针将使vecotr无效,并且在破坏向量时会产生问题。

  • 所有导致向量中基础数据重新分配的因素(例如添加元素或缩小)都会使指针指向悬空指针。 (正如评论中指出的那样,对于迭代器和引用也是如此)

答案 1 :(得分:2)

我认为引入data()函数是为了实现界面的完整性和便利性。

这样,我们就不必求助于&vec[0]&vec.front()的丑陋了。

此外,获得指向基础数据的指针在许多应用程序中很有用,例如与C代码或某些外部库的接口,或者在嵌入式上下文中。