我有一个字节向量(std::vector ):1,1,1,9,9,9,1,1,1
我想用未知的字节长度替换字节3-6 (我在运行时就知道了)。因此,矢量的长度可能增长、减少或保持不变。但我知道要替换的字节的起始点和结束点。
我可以使用erase或insert来调整大小,然后将新数据循环到旧数据。
replace执行搜索并替换与字节匹配的内容,而我知道要替换哪些字节。和std::replace似乎只替换了一个元素。我想用blob数据替换。
肯定有一个std函数可以“巧妙地”做到这一点吧?(如果我愿意,我会叫你Shirely )。
发布于 2017-03-13 20:58:28
如果这些值都相同,并且您知道要替换的间隔在向量内,则使用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);发布于 2017-03-13 19:54:23
std::vector::insert可以插入范围,所以只需erase现有元素并插入新元素即可。
发布于 2017-03-13 20:16:28
简短回答:除非我们从你那里得到更多细节,否则你的问题没有最终的解决方案
Long answer:从我在这里看到的情况来看,在我看来,std::vector是一个非常糟糕的选择。std::vector在内存中是连续的(从C++03开始),您正在做的事情有两种可能的结果:
std::deque在这方面是一个中间立场。这样做的原因是here。它完全支持在(几乎)恒定的时间内做你想做的事情,并在恒定的时间提供元素访问。你需要回答的问题是:与不会改变向量大小的替换相比,你需要多久进行一次替换?只有当向量大小的变化非常小时,std::vector才是一个很好的选择。否则,您应该考虑切换到std::deque。
在标准中有没有什么东西可以代替我呢?
该标准通过您自己编写的函数提供了尽可能高效地执行此操作的所有工具。擦除(如有必要),然后插入。事情就是这么简单。请记住两件事:
如果你想要删除的部分的大小等于你想要放入的数组的大小,那么better
中节省了大量资源
https://stackoverflow.com/questions/42762946
复制相似问题