一个简单的问题,我正在使用std :: rotate旋转向量中的元素顺序:
std::vector<int> V {1,2,3,4};
std::rotate(V.rbegin(), V.rbegin() + K, V.rend());
//output: {4,1,2,3}
我遇到了一个分段错误,其中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());
}
请首先注意
size != 0
的测试-否则您将被零除。