STD功能替换向量中的字节范围
std functions to replace range of bytes in vector
我有一个字节向量(std :: vector):[1,1,1,1,9,9,9,1,1,1]
我想用未知的字节长度替换字节3-6(我会在运行时知道。)。因此,矢量的长度可能会生长,推迟或保持不变。但是我知道要替换的字节的起点和终点。
我可以使用擦除或插入来调整大小,然后在旧数据上循环循环。
std ::替换进行搜索和匹配字节匹配的替换,而我知道要替换的字节。和std ::替换似乎只替换一个元素。我想替换为数据斑点。
肯定有一个性病功能可以"整洁"吗?(如果我愿意,我会打电话给您)。
如果值全部相同,并且您知道要替换的间隔在向量内,请使用std::fill
:
std::fill(v.begin() + 3, v.begin() + 6, 9);
此行将用值9替换向量v
上的元素3-6。
如果要放置的值并非全部相同,请改用std::copy
(您需要确保替换适合向量中):
std::copy(replacement.begin(), replacement.end(), v.begin() + 3);
这将用replacement
的内容从位置3开始替代向量v
的内容。
如果您不确定向量的大小,则可以先纠正大小:
v.resize(6);
std::vector::insert
可以插入范围,因此只需删除现有元素并插入新元素即可。
简短答案:除非我们从您那里获得更多详细信息
长答案:从我在这里看到的东西,对我来说,std::vector
是一个非常糟糕的选择。std::vector
在内存中是连续的(从C 03开始),您所做的事情有两个可能的结果:
- 您将保持相同的容器大小,并且向量非常适合此
- 您会从中间更改向量的大小,而向量的矢量很可怕!但是,
std::deque
是为此的中间立场。原因在这里。它准确地支持在(几乎)恒定时间(几乎)恒定时间内进行您想做的事情,并在恒定时间提供元素访问。
您需要回答的问题以确定要走的方法是:您需要多久进行一次替换,而替换将改变向量的大小,而不是一个矢量的大小?只有当数字变化的矢量大小很小时,std::vector
才是一个不错的选择。否则,您应该考虑切换到std::deque
。
标准中有什么可以替代我的?
标准提供了所有工具,可以通过您自己写的功能尽可能高效地做到这一点。擦除(如有必要),然后插入。就这么简单。请记住两件事:
- 只删除差异,不要删除您要替换的整个东西,前者会表现更好
- 如果要删除的零件的大小等于您要放入的数组,请始终考虑特殊情况。在这种情况下,不要删除或插入任何内容。这节省了大量的性能。
- 从不同线程使用int64的不同字节安全吗
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 错误:未在此范围内声明'reverse'
- 在UNIX系统中使用DIR查找文件的字节大小
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 在基于范围的for循环中使用结构化绑定声明
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- std::当在256字节边界上写入整数时,流的奇怪行为
- 在C++中查找范围的长度
- 基于字节数组生成静态范围整数值
- 在 Visual Studio 调试器中,如何从内存中打印字节范围?
- AWS S3 CPP SDK读取字节多于指定的范围
- STD功能替换向量中的字节范围
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- 在c++中获取字节范围的HTTP GET请求