如何将元素移动到向量的末尾?
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
)之间的距离视为元素的数量,范围将根据该数量移动。
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
)之间的距离视为元素的数量,范围将根据该数量移动。