我需要将动态分配的数组(例如从 a = new double[100] )包装到 std::vector (最好)而不复制数组。
此限制是由于我想要包装的数组是从文件映射而来的,因此仅执行向量(a,a+size)就会使内存使用量增加一倍。
有什么技巧可以做到这一点吗?
最好的解决方案之一是这样的STLSoft的array_proxy模板。不幸的是,doxygen 从源代码生成的文档页面并不能帮助理解模板。源代码实际上可能会更好一些:
- http://www.stlsoft.org/doc-1.9/array__proxy_8hpp-source.html
The array_proxy<>
模板在中得到了很好的描述马修·威尔逊 (Matthew Wilson) 的书《不完美的 C++》。我使用的版本是 STLSoft 网站上内容的精简版本,因此我不必引入整个库。我的版本不是那么便携,但这使得它比 STLSoft 上的版本简单得多(它跳过了很多可移植性的障碍)。
如果你像这样设置一个变量:
int myArray[100];
array_proxy<int> myArrayProx( myArray);
变量myArrayProx
有许多 STL 接口 -begin()
, end()
, size()
、迭代器等
所以从很多方面来说,array_proxy<>
对象的行为就像一个向量(尽管push_back()
自从array_proxy<>
无法增长 - 它不管理数组的内存,它只是将其包装在更接近向量的东西中)。
一件非常好的事情array_proxy<>
的一点是,如果将它们用作函数参数类型,则函数可以确定传入数组的大小,而本机数组则不然。并且包装数组的大小不是模板类型的一部分,因此使用起来非常灵活。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)