C ++向量范围构造函数

时间:2013-12-30 14:45:10

标签: c++ vector

当我发现向量容器没有“轻松”允许用户传递一系列值的构造函数(最小值和最大值)并且构造了一个向量时,我正在查看一些C ++文档其中包含来自min的元素 - >最大。我觉得这很奇怪,所以我尝试自己编写并发现它非常重要。这是我的解决方案。

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

template <typename T>
class MyIterator: public std::iterator<std::input_iterator_tag, int>
{

public:

  MyIterator(T val):value(val) {}
  MyIterator(const MyIterator & m):value(m.value) {}

  MyIterator& operator ++() 
  {
  ++value; 
    return *this; 
  }

  MyIterator operator ++(int) 
  { 
    MyIterator temp(*this); 
    operator ++();
    return temp; 
  }

  bool operator ==(const MyIterator & m) const { return value == m.value; }
  bool operator !=(const MyIterator & m) const { return !(value == m.value); }
  T& operator *() { return value; }

private:

  T value;

};

int main(int argc, char** argv)
{ 
  std::vector<int> my_vec(MyIterator<int>(100), MyIterator<int>(400));

  std::copy(my_vec.begin(), my_vec.end(), std::ostream_iterator<int>(std::cout, "\n"));

  return 0;
}

新的C ++是否有解决方案?

2 个答案:

答案 0 :(得分:4)

在C ++ 11中有std::iota函数。否则你有例如std::fillstd::fill_n,或std::generatestd::generate_n

答案 1 :(得分:1)

对于C ++ 11,没有实质性的工作来更改算法或容器以使它们更容易使用(有一些新的算法,并且容器知道分配器和rvalues)。 C ++ 14也没有实质性的改变。

C ++ 17有一些希望:Ranges Study Group正在研究使算法和容器更易于使用的概念。也就是说,目前还不清楚这次旅行的目的地。