ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 如何在不复制的情况下从C数组构造std :: vector或boost ::数组?

2019-07-27 22:09:38  阅读:181  来源: 互联网

标签:c arrays boost stdvector


给定一个char数组的指针,是否可以从中构造一个std :: vector或boost :: array,并避免内存复制?

提前致谢!

解决方法:

因为向量拥有自己的分配器和存储器,所以没有办法(对于非原始元素,move_iterators构造可能会有所帮助).

所以假设目标是得到一个真正的std :: vector< char>&对于现有的存储,你永远不会成功,甚至不能使用自定义分配器¹.

如果需要字符串,可以使用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

¹专门化std :: allocator< char>是太邪恶无法考虑,可能完全被标准所禁止

标签:c,arrays,boost,stdvector
来源: https://codeday.me/bug/20190727/1558138.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有