c++ - 如何在 STL 算法上接收字符串迭代器

标签 c++ stl iterator

我需要为接收“字符串列表”的库开发一种算法。

当然,我想传递一个“抽象”迭代器来将该列表( vector 、链表、映射...)的内部表示与从我的函数访问它的方式分离。

这是我的方法:

template <typename ForwardIterator>
void myAlgorithm(ForwardIterator itBegin, ForwardIterator itEnd) {
   for(; itBegin != itEnd ; ++itBegin) {
       // Do something with *itBegin
   }
}

我的问题是,如何限制容器的类型为字符串?甚至更多,是否有某种方法可以同时接受 std::strings 和 char* 作为元素?

非常感谢。

最佳答案

将静态断言与 std::iterator_traits<> 一起使用:

template<typename ForwardIterator>
void myAlgorithm(ForwardIterator itBegin, ForwardIterator itEnd) {
    typedef typename std::iterator_traits<ForwardIterator>::value_type value_t;
    BOOST_STATIC_ASSERT((
        boost::is_same<value_t, std::string>::value ||
        boost::is_same<value_t, char const*>::value
    ));

    for(; itBegin != itEnd ; ++itBegin) {
        // Do something with *itBegin
    }
}

如果您使用的是 C++0x 编译器,则可以使用 static_assert而不是 BOOST_STATIC_ASSERT std::is_same而不是 boost::is_same .

关于c++ - 如何在 STL 算法上接收字符串迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392740/

相关文章:

c++ - 无法访问 multimap 迭代器的方法?

c++ - 如何在运行 m 文件后退出 GNU Octave,而不关闭绘图窗口?

c++ - C++ 标准库在任何时候都包含每个平台的 native 头文件吗?

C++ std::getline 错误

c++ - 为什么C++不提供先进先出单链接列表?

algorithm - 为什么是 `copy_n` 、 `fill_n` 和 `generate_n` ?

c++ - 基于指针的基本随机访问迭代器的代码?

java - 迭代所有相同类型的连接 block

C++:很难从 vector 中删除一个项目

c++ - 添加临时对象时 emplace_back 是否比 push_back 更好?