C++ 是否有一种简单/优雅的方法将一系列整数推送到STD向量?

C++ 是否有一种简单/优雅的方法将一系列整数推送到STD向量?,c++,c++11,std,C++,C++11,Std,我有一个简单的任务,就是用一系列整数初始化std::vector 范围由用户给定,我尽量避免使用for循环 比如: void addRange(std::vector<int>& vReturn, int nStart, int nEnd) { vReturn.clear(); // straightforward solution for (int nInteger = nStart; nInteger <= nEnd; nInteger++

我有一个简单的任务,就是用一系列整数初始化
std::vector

范围由用户给定,我尽量避免使用
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?

}
void addRange(std::vector&vReturn、int-nStart、int-nEnd)
{
vReturn.clear();
//直截了当的解决方案

对于(int nInteger=nStart;nInteger,您可以在C++11中使用算法来实现这一点

您也可以使用

auto range=boost::irange(nStart,nEnd+1);
赋值(range.begin(),range.end());

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


#包括
#包括
使用名称空间std;
结构添加{
void运算符()(int x、int y、vector和vec)
{
如果(x>y)
返回;
向量推回(x);
运算符()(++x,y,vec);
}
};
void addRange(标准::向量和向量返回、常量int nStart、常量int nEnd)
{
vReturn.resize(nEnd-nStart);
vReturn.clear();
Add()(nStart,nEnd,vReturn);//使用函子对象更新向量
}
int main()
{
向量向量机;
int start=1,end=10;
添加范围(向量、开始、结束);
返回0;
}

std::copy怎么办?@WileTheCoyot在哪里?为什么不使用assign?std::copy和std::iota之间有什么区别?@WileTheCoyot请查看帖子中的链接。复制就复制。iota用递增的值填充范围。既然使用C++11,为什么不
std::vector addRange(int nStart,int nEnd)
作为签名并按值返回向量?此外,为什么函数参数的
常量
是多余的?@TemplateRex-
常量
是多余的,我只是习惯于将
[in]
中的任何
参数定义为
常量
,尽管是按值传递的……这使得接口更加清楚
[in]
和什么是
[out]
vReturn.clear();
vReturn.resize((nEnd - nStart) + 1);
std::iota(vReturn.begin(), vReturn.end(), nStart);
auto range = boost::irange<int>(nStart, nEnd + 1);
vReturn.assign(range.begin(), range.end());
#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;
}