繁体   English   中英

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

[英]Rotating vector elements by value greater than vector size?

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

V.rebegin() + 6不是有效的迭代器。 它指向哪个元素? 我假设您想将向量旋转K个元素。 您需要做的是应用模运算符来找出哪个值应该在向量的前面。

std::vector<int> V {1,2,3,4};
const auto K = 4 % V.size();
std::rotate(V.rbegin(), V.rbegin() + K, V.rend());

我不确定为什么您期望K为6会导致{2,3,4,1},它得到{3,4,1,2}。 也许我误解了这个问题。

编辑:请参阅此答案有关首先检查大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM