c – 如何在不复制的情况下从C数组构造std :: vector或boost ::
发布时间:2020-12-16 09:58:28 所属栏目:百科 来源:网络整理
导读:给定一个char数组的指针,是否可以从中构造一个std :: vector或boost :: array,并避免内存复制? 提前致谢! 解决方法 因为向量拥有自己的分配器和存储器,所以没有办法(对于非原始元素,move_iterators构造可能会有所帮助). 所以假设目标是得到一个真正的std :
给定一个char数组的指针,是否可以从中构造一个std :: vector或boost :: array,并避免内存复制?
提前致谢! 解决方法
因为向量拥有自己的分配器和存储器,所以没有办法(对于非原始元素,move_iterators构造可能会有所帮助).
所以假设目标是得到一个真正的std :: vector< char>&对于现有的存储,你永远不会成功,甚至不能使用自定义分配器1. 如果需要字符串,可以使用boost :: string_ref(在utility / string_ref.hpp中). 否则,您可以使用1维multi_array_ref(来自Boost Multi Array) 1.使用string_ref 这绝对是最简单的: Live On Coliru #include <boost/utility/string_ref.hpp> #include <iostream> using boost::string_ref; int main() { char some_arr[] = "hello world"; string_ref no_copy(some_arr); std::cout << no_copy; } 2. multi_array_ref 这是更多功能的,如果你不适合字符串界面,它会“更好”. Live On Coliru #include <boost/multi_array/multi_array_ref.hpp> #include <iostream> using ref = boost::multi_array_ref<char,1>; using boost::extents; int main() { char some_arr[] = "hello world"; ref no_copy(some_arr,extents[sizeof(some_arr)]); std::cout.write(no_copy.data(),no_copy.num_elements()); } 两个例子打印 hello world 1专门化std :: allocator< char>是太邪恶无法考虑,可能完全被标准所禁止 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |