向量线性移位的最佳方法是保持长度不变并将空白位置设置为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
答案 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;
}