簡體   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