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

时间:2014-05-28 10:42:20

标签: c++ c++11 std

我有一个简单的任务,即使用一系列整数初始化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?

}

2 个答案:

答案 0 :(得分:9)

您可以使用算法iota在C ++ 11中执行此操作。

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

您也可以使用boost::irange

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

答案 1 :(得分:0)

我有一个替代解决方案,它不使用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;
}