是否有一种简单/优雅的方法将整数范围压入STD向量?

Is there a simple / elegant way to push a Range of integers to an STD vector?

本文关键字:范围 整数 方法 向量 STD 一种 简单 是否      更新时间:2023-10-16

我有一个简单的任务,就是用一组整数初始化一个std::vector<int>

范围由用户给出,我尽量避免使用for循环。

类似:

void addRange(std::vector<int>& vReturn, int nStart, int nEnd)
{
    vReturn.clear();
    // straightforward solution
    for (int nInteger = nStart; nInteger <= nEnd; nInteger++)
    {
         vReturn.push_back(nInteger);
    }
    //////////////////////////////////////////////
    // Elegent Pseudo-Code
    vReturn.add_range(nStart, nEnd);   // <<- is this doable?
}

您可以在c++ 11中使用iota算法完成此操作。

vReturn.clear();
vReturn.resize((nEnd - nStart) + 1);
std::iota(vReturn.begin(), vReturn.end(), nStart);

也可以使用boost:: range

auto range = boost::irange<int>(nStart, nEnd + 1);
vReturn.assign(range.begin(), range.end());

我有一个替代的解决方案,它不使用for循环,不使用boost或c++ 11


#include <iostream>
#include <vector>
using namespace std;
struct Add{
  void operator()(int x, int y, vector<int>& vec)
  {
    if(x > y)
      return;
    vec.push_back(x);
    operator()(++x, y, vec);
  }
};
void addRange(std::vector<int>& vReturn, const int nStart, const int nEnd)
{
   vReturn.resize(nEnd - nStart); 
   vReturn.clear(); 
   Add()(nStart, nEnd, vReturn);  //update the vector using Functor object
}
int main()
{
   vector<int> vec;
   int start = 1, end = 10;
   addRange(vec, start , end);

   return 0;
}
相关文章: