2

可能重复:
std::vector 元素是否保证是连续的?

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

但是,我仍然怀疑这种方法对于任何大小的向量是否仍然有效,尤其是当向量增长到一定大小时,这种假设可能会失效。

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

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

3 回答 3

5

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

但这并不意味着当你缩小或扩大它们时它们不会在内存中移动......

于 2011-09-30T10:40:15.197 回答
3

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

向量的元素是连续存储的,这意味着如果 v 是一个向量,其中 T 是除 bool 之外的某种类型,那么对于所有 0 <= n < v,它都遵循恒等式 &v[n] == &v[0] + n 。尺寸()​​。

于 2011-09-30T10:46:50.160 回答
1

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

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

于 2011-09-30T10:42:20.490 回答