C++ vector 范围构造函数

标签 c++ vector

我正在查看一些 C++ 文档,这时我突然想到 vector 容器没有构造函数可以“轻松”允许用户传递一系列值(最小值和最大值)并构造 vector 其中包含从最小值到最大值的元素。我认为这很奇怪,所以我尝试自己编写并发现它很重要。这是我的解决方案。

#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++11 中有 std::iota功能。否则你有例如std::fillstd::fill_n , 或 std::generatestd::generate_n .

关于C++ vector 范围构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20841775/

相关文章:

c++ - 分配包含 STL vector 的结构时发生内存泄漏

c++ - 需要使用Sqlite创建一个简单的C++项目

c++ - 围绕一个范围包装无符号整数加法/减法

c++ - 如何在延迟着色中从光照几何体的内部进行绘制

java - 如何使用 swig 类型映射将 std::vector<std::pair<std::string, int>> 从 Java 返回到 C++

java - 如何在 Java 中过滤数组?

c++ - 在 std :sort() 上使用类

c++ - 为什么我的函数不记录最小的答案?

c++ - 在基类 vector 中存储抽象派生类对象

c++ - 无锁定的多个 vector 编写器