看起来你想告诉std::vector
使用std::array
数据作为它的底层缓冲区,至少在它需要做一些重新分配之前.
std::vector
没有这个的接口.它应该自己管理其内部缓冲区,因此以统一的方式分配,跟踪和删除内存.如果你可以提供一个缓冲区来使用,你还需要提供有关它如何分配的信息,是否可能在离开范围时被破坏等.这很容易出错并且很难看,所以不可用.
你可以做的是std::vector
用std::move_iterator
s 构造来将内容移出std::array
.当然,这不会对算术类型产生影响,但对于移动成本低的逻辑大对象,可以避免大量数据复制:
std::arraya = fun(); std::vector b { std::make_move_iterator(a.begin()), std::make_move_iterator(a.end())) };