字符串迭代器不兼容

时间:2013-05-01 15:25:45

标签: c++ stl

这是我的示例代码..

    const std::string strSchemeEnd("://");

    StringConstIteratorType itScheme = std::search(p_strUrl.begin(), p_strUrl.end(), strSchemeEnd.begin(), strSchemeEnd.end());
    StringConstIteratorType  l_itTempConst = p_strUrl.begin();
    m_strScheme.reserve(std::distance(l_itTempConst, itScheme));
    std::copy(l_itTempConst , itScheme, std::back_inserter(m_strScheme));
    boost::algorithm::to_lower(m_strScheme);
    l_itTempConst = strSchemeEnd.end();
    if ( itScheme == l_itTempConst )
        return;

当我尝试运行程序时,我发现以下错误

#if _ITERATOR_DEBUG_LEVEL == 2
    void _Compat(const _Myiter& _Right) const
        {   // test for compatible iterator pair
        if (this->_Getcont() == 0
            || this->_Getcont() != _Right._Getcont())
            {   // report error
            _DEBUG_ERROR("string iterators incompatible");
            _SCL_SECURE_INVALID_ARGUMENT;
            }
        }

我经常遇到这个问题。有时一种解决方法有效,有时却没有。我想知道这个“字符串迭代器不兼容”错误的原因。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:6)

这种情况下的问题是itScheme是指向p_strUrl的迭代器,而l_itTempConst是指向strSchemeEnd的迭代器。因为它们指向不同的字符串,所以比较这两个迭代器是不合法的。

答案 1 :(得分:4)

itScheme是字符串p_strUrl的迭代器 l_itTempConst不是strSchemeEnd

的迭代器

您无法比较来自不同容器的迭代器