我需要将动态分配的数组(例如来自 a = new double[100])包装到 std::vector(最好)而不复制数组。 此限制是由于我要包装的数组是从文件中映射而来的,因此只需执行 vector(a, a+size) 就会使内存使用量加倍。
有什么技巧可以做到吗?
最佳答案
最好的解决方案之一是 STLSoft's array_proxy<>。模板。不幸的是,doxygen 从源代码生成的文档页面对理解模板没有多大帮助。源代码实际上可能更好一些:
array_proxy<>
Matthew Wilson's book, Imperfect C++ 中很好地描述了模板.我使用的版本是 STLSoft 网站上的精简版,因此我不必引入整个库。我的版本不那么便携,但这使它比 STLSoft 上的版本简单得多(STLSoft 跳过了很多便携性障碍)。
如果你像这样设置一个变量:
int myArray[100];
array_proxy<int> myArrayProx( myArray);
变量myArrayProx
有许多 STL 接口(interface) - begin()
, end()
, size()
、迭代器等
所以在很多方面,array_proxy<>
对象的行为就像一个 vector (虽然 push_back()
不存在,因为 array_proxy<>
不能增长 - 它不管理数组的内存,它只是将它包装在更接近 vector 的东西中)。
array_proxy<>
真的很棒是,如果您将它们用作函数参数类型,则该函数可以确定传入的数组的大小,这对于 native 数组而言并非如此。包装数组的大小不是模板类型的一部分,因此使用起来非常灵活。
关于c++ - 将动态数组包装到 STL/Boost 容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713657/