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个位置,依此类推。
答案 0 :(得分: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;
}
}
参数说明:
基本上,您可以看到第二个参数和第一个参数(此处为1
)之间的距离,作为元素的数量,通过该元素移动范围。