C ++ Vectors总是连续的吗?

时间:2011-09-30 10:36:14

标签: c++ vector contiguous

  

可能重复:
  Are std::vector elements guaranteed to be contiguous?

我遇到过一种技术,人们在C ++中使用向量来接收或发送MPI操作的数据,因为它据说将元素连续存储在内存中。

然而,我仍然怀疑这种方法对于任何大小的向量是否都会保持稳健,特别是当向量增长到一定大小时,这个假设可能会崩溃。

以下是我所说的一个例子:

MPI_Recv( &partials[0] , partials.size() , mpi_partial , 0, 
         DALG_ELIMINATE_REQ_MSG ,MPI_COMM_WORLD , &status );

3 个答案:

答案 0 :(得分:5)

是的,无论大小如何,C ++向量总是连续的。

这并不意味着他们在收缩或扩展它们时不会在内存中移动......

答案 1 :(得分:3)

C ++工作草案(www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf)在23.4.1中说:

  

矢量的元素是连续存储的,这意味着如果v是   一个向量,其中T是某种类型而不是bool,然后它   对于所有0< = n< 0< = n< n< = n< n< v.size()。

答案 2 :(得分:1)

基本上,是的。我所知道的所有实现都是,并且标准要求向量具有O [1]查找,这基本上需要一个连续的内存块。

标准“您不应该依赖实施细节”免责声明。