通过大于矢量大小的值旋转矢量元素?

Bab*_*ham 0 c++ stl rotation

有点简单的问题,我使用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}

Mar*_*ica 5

如果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- 否则你将被除以零.