我有一个数组,其中每个'元素'由4个连续值组成。更新后,我将数组向末尾移动4个值,并在开头插入4个新值。
切换:
int m = 4;
for (int i = _vsize - 1; i + 1 - m != 0; i--){
_varray[i] = std::move(_varray[i - m]);
}
插入:
memcpy(&_varray[0], glm::value_ptr(new_element), 4 * sizeof(float));
其中new_element
的类型为glm::vec4
,包含所述4个新值。
有关如何改善这一点的任何建议?
(现在我只换了一个元素,但是希望能够灵活地换8次,而不必把它放在一个循环中)
谢谢。
答案 0 :(得分:2)
您可以尝试std::copy_backward
。您希望将一系列值复制到同一容器中的另一个范围。由于范围重叠而您正在复制到右侧,因此您无法使用常规std::copy
,但必须使用std::copy_backward
。
int m = 4; // make this a multiple of your 'element' size
std::copy_backward(&_varray[0], &_varray[_vsize - m], &_varray[_vsize]);
还有std::move_backward
但这并不重要,因为您的float
值不可移动。