通过N个元素移动数组中的元素

时间:2014-10-17 22:44:40

标签: c++ arrays

我有一个数组,其中每个'元素'由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次,而不必把它放在一个循环中)

谢谢。

1 个答案:

答案 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值不可移动。