gpt4 book ai didi

c++ - 在 C++20 中移动 vector

转载 作者:行者123 更新时间:2023-12-01 12:44:00 29 4
gpt4 key购买 nike

我想使用 C++20 中的这个新特性,将 vector 向右移动 std::shift_right .
我不确定的是如何在移位后将最后一个元素置于 vector 的开头?
就像上面的例子一样......我将最后一个元素保存在一个临时变量中,然后在移动之后我将第一个元素设置为临时变量。

#include <iostream>
#include <vector>
#include <algorithm>



int main()
{
std::vector<int> seq = { 5, 4, 3, 2, 1 };

std::vector<int>::iterator it;
std::vector<int>::iterator temp;
temp = seq.end() - 1;


std::shift_right(seq.begin(), seq.end(), 1);
std::replace(seq.begin(), seq.end(), seq.at(0), *temp);

for (it = seq.begin(); it != seq.end(); it = std::next(it))
std::cout << *it << " ";

return 0;
}

最佳答案

虽然您可能可以通过 std::shift_right 实现您想要的,执行您所描述的操作的适当算法是 std::rotate ,您也可以在没有 c++20 的情况下使用它:

std::rotate(seq.begin(), seq.end() - 1, seq.end());    
这是一个 demo .
原因 shift_right版本不起作用是你有一个迭代器到最后一个元素。当您完成移位时,原始的最后一个元素将被覆盖,并且迭代器现在指向移位的元素。所以你可以做的是复制最后一个元素,然后把它放在开头:
int temp = seq.back();
std::shift_right(seq.begin(), seq.end(), 1);
seq[0] = temp;
这是一个 demo .但请注意,这是一个 hack;使用 shift_right如果你不关心你正在覆盖的那些元素。如果你关心元素,那么 rotate范围。

关于c++ - 在 C++20 中移动 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63220998/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com