[英]stl style algorithm: how to manage output iterator
如果我需要以stl风格编写一些算法,并且原型是这样的:
template<typename RAIter>
void my_algo(RAIter begin, RAIter end, RAIter out);
看起来类似于例如std :: copy
关于输出迭代器的问题,这是否意味着调用程序代码应分配足够的容量? 和算法仅使用++ out? 没有任何检查。 还是算法应该添加新元素? 怎么样?
如果您的算法仅获得输出迭代器类型,那么它将无法做很多事情,因为输出迭代器甚至无法比较相等性。 可能您的意思是这样的接口:
template<typename RAIter, typename WIter>
WIter my_algo(RAIter begin, RAIter end, WIter out);
算法的约定应指定最多可以根据std::distance(begin, end)
写入多少个元素std::distance(begin, end)
并且out
至少应允许分配尽可能多的值。 也就是说,算法中没有对输出迭代器的特殊处理。
但是请注意,通常必须返回输出迭代器以指示在何处停止对象写入。
这取决于您要与图书馆签订的合同。 无论哪种情况,您的调用者都必须意识到内存的含义,抛出行为和错误情况。 我建议使得它在文档中明确的前提是出点至少距离(结束-开始)的开始元素。 这些元素可能不一定处于有效状态。 其背后的原因是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.