c++ - 将动态数组包装到 STL/Boost 容器中?

标签 c++ arrays boost vector containers

我需要将动态分配的数组(例如来自 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/

相关文章:

c++ - 为类中的枚举重载 () 运算符 - C++

c++ - 打印出错误的值

c - 如何在文件(数据库)中存储数组以及如何在程序中访问它

PHP 字符串到十六进制/字节?

c++ - 数组大小成员函数编译错误

c++ - 使用 boost::thread::interrupt() 时,您*需要*捕获 thread_interrupted 异常吗?

c++ - boost::mpi 阻塞 IO 不会被 linux 信号中断

c++ - 使用多个目录构建 Makefile

c++ - 什么是私有(private)MFC,为什么不能通过普通接口(interface)访问?

c++ - 将 boost 多精度与三角函数结合使用