[英]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.