相关疑难解决方法(0)

规范正向输出迭代器的规范方法

如何以规范的方式在C++ 11中定义forward-output-iterators?

根据标准,forward_iterator只是一个input_iterator.所以相应的forward_iterator_tag只是延伸input_iterator_tag.如果我们std::iterator用来定义迭代器,我们使用什么标签作为正向输出迭代器?

定义扩展两者的私有标记是否规范forward_iterator_tag,output_iterator_tag或者是否有更好的解决方案?

c++ iterator-traits c++11

7
推荐指数
1
解决办法
509
查看次数

STL填充和转发迭代器

根据大多数C++引用,例如cplusplus.com,前向迭代器不需要是可赋值的(我的意思是,引用左值).但是,对于需要写入值的几个STL算法std::fill(例如std::generate等),规范使用了前向迭代器:

template <class ForwardIterator, class T>
  void fill (ForwardIterator first, ForwardIterator last, const T& val);
Run Code Online (Sandbox Code Playgroud)

而等效行为需要左值取消引用:

template <class ForwardIterator, class T>
  void fill (ForwardIterator first, ForwardIterator last, const T& val)
{
  while (first != last) {
    *first = val;
    ++first;
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,它实际上是使用一个可变的前向迭代器和一次传递.

现在的问题是:

(1)为什么不明确这些情况下使用的前向迭代器是否可变?

(2)更新:我发现以下问题是愚蠢的:我暂时忘记了输出迭代器不需要支持相等比较.无论如何,上述问题仍然存在.

为什么使用前向迭代器,而不是输出迭代器std::fill,std::generate等等,而他们实际上并不需要多遍?(std::copy例如,只需要输出迭代器.基本原理是什么?)

c++ iterator stl

7
推荐指数
1
解决办法
2056
查看次数

标签 统计

c++ ×2

c++11 ×1

iterator ×1

iterator-traits ×1

stl ×1