如果我需要在stl样式中编写一些算法,原型就像:
template<typename RAIter>
void my_algo(RAIter begin, RAIter end, RAIter out);
看起来类似于例如的std ::复制
关于输出迭代器的问题, 这是否意味着调用者代码应该分配足够的容量? 和算法只使用++输出?没有任何检查。 或者算法应该添加新元素?如何?
答案 0 :(得分:1)
如果算法只获得输出迭代器类型,它就不能用它做很多事情,因为输出迭代器甚至不能比较相等。可能你的意思是这样的界面:
template<typename RAIter, typename WIter>
WIter my_algo(RAIter begin, RAIter end, WIter out);
您的算法合同应指定在std::distance(begin, end)
和out
方面最多可以写入多少元素,并且应至少允许分配多少个值。也就是说,算法中没有输出迭代器的特殊处理。
但是,请注意,通常需要返回输出迭代器以指示对象的写入停止位置。
答案 1 :(得分:0)
这取决于您对图书馆的合同。在任何一种情况下,调用者都必须了解内存含义,抛出行为,错误情况。我建议在你的文档中明确指出,前提是 out 指向至少距离(end-begin)元素的开头。元素可能不一定处于有效状态。 这背后的原因是: