向量的有效移位

时间:2018-09-12 05:59:29

标签: c++ c++11

向量线性移位的最佳方法是保持长度不变并将空白位置设置为0,就像valarray.shift(int n)一样。

我能想到一个幼稚的方法,只是想知道是否有更好的方法

int shift = 2;
std::vector<int> v = {1,2,3,4,5};
std::rotate(v.begin(), v.end() - shift, v.end());
std::fill(v.begin(), v.begin() + shift, 0);

// Input: 1,2,3,4,5
// Output: 0,0,1,2,3

1 个答案:

答案 0 :(得分:2)

我认为这样可以限制对std :: copy的调用:

#include <iostream>
#include <vector>

int main()
{
    const size_t shift {2};
    const std::vector<int> inVec = {1,2,3,4,5};
    std::vector<int> outVec(inVec.size());
    if(inVec.size() - shift > 0)
    {
        const size_t start {inVec.size() - shift};
        std::copy(inVec.begin(), inVec.begin() + start, outVec.begin() + shift);
    }
    for(const auto& val : inVec)
    {
        std::cout << val << " ";
    }
    std::cout << std::endl;
    for(const auto& val : outVec)
    {
        std::cout << val << " ";
    }
    std::cout << std::endl;
}