STL通常定义一个输出迭代器,如下所示:
template<class Cont>
class insert_iterator
: public iterator<output_iterator_tag,void,void,void,void> {
// ...
Run Code Online (Sandbox Code Playgroud)
为什么输出迭代器定义value_type为void?算法知道它应该输出什么类型的值会很有用.
例如,一个将URL查询"key1=value1&key2=value2&key3=value3"转换为包含键值字符串元素的任何容器的函数.
template<typename Ch,typename Tr,typename Out>
void parse(const std::basic_string<Ch,Tr>& str, Out result)
{
std::basic_string<Ch,Tr> key, value;
// loop over str, parse into p ...
*result = typename iterator_traits<Out>::value_type(key, value);
}
Run Code Online (Sandbox Code Playgroud)
这提示的SGI参考页面value_type是因为无法取消引用输出迭代器.但这不是唯一的用途value_type:我可能想要实例化一个以便将它分配给迭代器.
有什么替代方法可以用输出迭代器构造输出值?我考虑过两种方法:
pair<string,string>,或者从中可以转换的类型.我想知道如果没有这个要求我能做到,也许允许任何可以从两个构造的元素std::string.