有点简单的问题,我使用std :: rotate来旋转向量中元素的顺序:
getInitialView = () => {
firebase.auth().onAuthStateChanged((user) => {
let initialView = user ? "Home" : "Login";
this.setState({
userLoaded: true,
initialView: initialView
})
});
}
我遇到了一个分段错误,其中K是> = V.size(),我很难理解:1)为什么会出现这个错误? 2)如何用这样的K值进行旋转操作?
例如,K为6应输出{2,3,4,1}
答案 0 :(得分:5)
如果K
大于V.size()
,则V.rbegin()+K
是无效的迭代器。你需要通过mod大小来减少K.类似的东西:
if (V.size() != 0) {
std::rotate(V.rbegin(), V.rbegin() + (K % V.size()), V.rend());
}
首先注意size != 0
的测试 - 否则你会被零除。
答案 1 :(得分:1)
V.rebegin() + 6
不是有效的迭代器。它指向哪个元素?我假设您想要通过K个元素旋转矢量。你需要做的是应用模运算符来找出向量前面的值。
std::vector<int> V {1,2,3,4};
const auto K = 4 % V.size();
std::rotate(V.rbegin(), V.rbegin() + K, V.rend());
我不确定为什么你认为6的K应该导致{2,3,4,1},它给出{3,4,1,2}。也许我误解了这个问题。
修改:请先查看this answer有关检查尺寸的信息。