相关疑难解决方法(0)

输出迭代器的value_type

STL通常定义一个输出迭代器,如下所示:

template<class Cont>
class insert_iterator
: public iterator<output_iterator_tag,void,void,void,void> {
    // ...
Run Code Online (Sandbox Code Playgroud)

为什么输出迭代器定义value_typevoid算法知道它应该输出什么类型的值会很有用.

例如,一个将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.

c++ iterator stl

22
推荐指数
1
解决办法
5513
查看次数

标签 统计

c++ ×1

iterator ×1

stl ×1