如何将元素移动到向量的末尾?

ygo*_*dev 0 c++ vector erase push-back

int main(){
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(vec[0]);
    for (auto it = vec.begin(); it != vec.end(); it++) {
        std::cout << *it << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这输出[1,2,1],我理解,因为矢量正在复制vec [0]并将其推回.但是,我希望输出像[2,1]并且好奇我是否可以在不使用push_back()然后必须使用erase()的情况下完成此操作;

目标:我希望能够将向量中的元素移动到结尾,而向量相应地调整自身,所以如果我将第5个位置的元素移动到结尾,原始第5个位置之后的所有元素都会向上移动,所以新的第5个位置将元素放在旧的第6个位置,依此类推.

Mik*_*eMB 7

你可能正在寻找std::rotate.

int main() {
    //Fill vector
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    //move first element to the end
    std::rotate(vec.begin(), vec.begin() + 1, vec.end());

    //print content
    for (auto e:vec) {
        std::cout << e << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

参数说明:

  • 第一个和最后一个参数表示将移动的所有元素的范围(所以这里是整个容器).
  • 第二个参数是在旋转后落在第一个位置的元素的迭代器.当您想要将第一个元素移动到结尾时,第二个元素是移动到前面的元素(索引1).

基本上,您可以看到第二个参数和第一个参数(此处1)之间的距离作为元素的数量,通过该元素的数量移动范围.