c++ - 如何将元素移动到 vector 的末尾?

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

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

目标:我希望能够将 vector 中的一个元素移动到末尾,同时 vector 相应地调整自身,所以如果我将第 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)之间的距离视为范围移动的元素数。

关于c++ - 如何将元素移动到 vector 的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901353/

相关文章:

c++ - pthread_join 的段错误

c++ - 最烦人的解析

C++ 我是否正确添加和访问我的 vector ?

vector - VHDL 直接比较向量

c++ - Erase-remove 习语 : what happens when remove return past-the-end-iterator?

c++ - 如何将 "const_reverse_iterator"参数传递给 "std::vector::erase()"?

c++ - 使 LLVM 无法包含 $(LLVM_SRC_ROOT)/Makefile.rules

c++ - 使用 boost::program_options 和 push_back 阅读到 std::vector?

c++ - "Empty"数组\vector 成员 C++

C++ 删除 vector 的某些元素