【问题标题】:C++ Vector Range ConstructorC++ 向量范围构造函数
【发布时间】:2013-12-30 14:45:09
【问题描述】:

我正在查看一些 C++ 文档时,我突然想到向量容器没有一个构造函数,该构造函数“轻松”允许用户传递一系列值 - 最小值和最大值 - 并构造了一个向量其中包含从 min -> max 的元素。我觉得这很奇怪,所以我试着自己写,发现这并不简单。这是我的解决方案。

#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++ 有解决这个问题的方法吗?

【问题讨论】:

标签: c++ vector


【解决方案1】:

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

【讨论】:

  • 不错的解决方案,但我正在考虑像在解决方案中那样在向量构造函数中创建数字序列。
【解决方案2】:

对于 C++11,在更改算法或容器以使其更易于使用方面没有实质性的工作(有一些新算法并且容器可以识别分配器和右值)。 C++14 也没有实质性的变化。

不过,C++17 还是有希望的:Ranges Study Group 正在研究使算法和容器更易于使用的概念。也就是说,尚不清楚该旅程将前往何处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多