当前位置:  开发笔记 > 编程语言 > 正文

是否可以将std :: array移动到std :: vector中?

如何解决《是否可以将std::array移动到std::vector中?》经验,为你挑选了1个好方法。



1> TartanLlama..:

看起来你想告诉std::vector使用std::array数据作为它的底层缓冲区,至少在它需要做一些重新分配之前.

std::vector没有这个的接口.它应该自己管理其内部缓冲区,因此以统一的方式分配,跟踪和删除内存.如果你可以提供一个缓冲区来使用,你还需要提供有关它如何分配的信息,是否可能在离开范围时被破坏等.这很容易出错并且很难看,所以不可用.

可以做的是std::vectorstd::move_iterators 构造来将内容移出std::array.当然,这不会对算术类型产生影响,但对于移动成本低的逻辑大对象,可以避免大量数据复制:

std::array a = fun();
std::vector b { std::make_move_iterator(a.begin()),
                          std::make_move_iterator(a.end())) };


那么你可以使用自定义分配器,比如Howard Hinnant的`short_alloc`.我看到的主要问题是`vector`管理自己的大小,你需要用一个已经填充的数组来初始化它(比如`resize`加上一个自定义的allocator ::构造,当被问到值时它不会执行任何初始化-在里面).
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有