【发布时间】: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++11 中,只有一个新选项可以在创建向量时填充它。