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

How can I move an element to the end of a vector?

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;
}

这输出 [1, 2, 1],我理解这是因为向量正在制作 vec[0] 的副本并将其推回。但是,我希望输出类似于 [2, 1] 并且很好奇我是否可以在不使用 push_back() 然后必须使用 erase();

的情况下完成此操作

目标:我希望能够将向量中的一个元素移动到末尾,同时向量相应地调整自身,所以如果我将第 5 个位置的元素移动到末尾,原始元素之后的所有元素第 5 个位置会向上移动,因此新的第 5 个位置的元素将位于旧的第 6 个位置,依此类推。

您可能正在寻找 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;
    }
}

参数说明:

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

从本质上讲,您可以将第二个参数和第一个参数(此处 1)之间的距离视为元素的数量,范围将根据该数量移动。