相关疑难解决方法(0)

C++标准措辞:"通过范围内的所有迭代器"是否意味着顺序性?

这个SO问题引发了std::generate对标准的讨论和保证.特别是,你可以使用具有内部状态的函数对象并依赖于generate(it1, it2, gen)调用gen(),存储结果*it,gen()再次调用,存储*(it + 1)等,或者它可以从后面开始,例如?

标准(n3337,§25.3.7/ 1)说明了这一点:

效果:第一个算法调用函数对象,gen并通过范围内的所有迭代器分配gen的返回值[first,last).第二个算法调用函数对象gen并通过范围内的所有迭代器分配gen的返回值,[first,first + n)如果n是正数,则不执行任何操作.

似乎没有保证排序,特别是因为其他段落具有更强的措辞,例如std::for_each(效果:适用f于取消引用范围中的每个迭代器的结果[first,last),从第一个开始并继续到last - 1.如果我们从字面上理解它,它只是保证从开始到first结束last- 不保证两者之间的排序.

但是:无论微软Apache的C++标准库既给那些需要的评价是连续的文档页面的例子.libc ++(in algorithm)和libstdc ++(in bits/stl_algo.h)都以这种方式实现它.此外,如果generate没有这种保证,您将失去许多潜在的申请.

目前的措辞是否意味着顺序性?如果没有,这是委员会成员的监督还是故意的?

(我很清楚,没有很多人能够提供有关这个问题的深刻答案,而不仅仅是推测或讨论,但我认为,根据SO指南,这并不能使这个问题"没有建设性".)


感谢@juanchopanza指出这个问题,并引用了我关于的段落for_each.

c++ standards std c++11

26
推荐指数
2
解决办法
466
查看次数

标签 统计

c++ ×1

c++11 ×1

standards ×1

std ×1