有点简单的问题,我使用std :: rotate在向量中旋转元素的顺序:
std::vector<int> V {1,2,3,4};
std::rotate(V.rbegin(), V.rbegin() + K, V.rend());
//output: {4,1,2,3}
Run Code Online (Sandbox Code Playgroud)
我得到一个分段错误,其中K> = V.size(),我很难理解:1)为什么会出现这个错误?2)如何用这样的K值进行旋转操作?
例如,K为6应输出{2,3,4,1}
如果K大于V.size(),则V.rbegin()+K是无效的迭代器.你需要通过mod大小来减少K. 就像是:
if (V.size() != 0) {
std::rotate(V.rbegin(), V.rbegin() + (K % V.size()), V.rend());
}
Run Code Online (Sandbox Code Playgroud)
首先注意测试size != 0- 否则你将被除以零.