繁体   English   中英

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

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

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

}

您可以使用算法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());

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM