问题:
请将一个具有n个元素的一维向量向左旋转i个位置。例如i = 3,那么向量abcdefgh旋转之后得到向量defghabc。
方案一:
旋转向量X实际上就是将向量ab的两个部分交换为向量ba,我们先从ab开始,转置a得到aTb,再转置b得到aTbT,然后转置aTbT,得到(aTbT)T,即ba,则有,
reverse(0, i - 1); // cbadefgh
reverse(i, n - 1); // cbahgfed
reverse(0, n - 1); // defghabc
实现例程:
template<typename T> void reverse(vector<T> &m, int x, int y) { T tmp; while (x < y) { tmp = m[x]; m[x] = m[y]; m[y] = tmp; x++; y--; } } template&