一个简单的问题,我正在使用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的测试-否则您将被零除。

09-10 03:48