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/