c++ boost::iterator_range<iter> string_view 错误

Posted

技术标签:

【中文标题】c++ boost::iterator_range<iter> string_view 错误【英文标题】:c++ boost::iterator_range<iter> string_view error 【发布时间】:2013-12-07 20:26:45 【问题描述】:

我正在尝试在 C++ 中以最快的方式拆分字符串。我在这里遇到错误:

#include <bitset>
#include <iostream>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/timer.hpp>

using namespace std;
size_t const N = 10000000;
template<typename C>
void test_strpbrk(string const& s, char const* delims, C& ret)

    C output;

    char const* p = s.c_str();
    char const* q = strpbrk(p + 1, delims);
    for (; q != NULL; q = strpbrk(p, delims))
    
        output.push_back(typename C::value_type(p, q));
        p = q + 1;
    

    output.swap(ret);


int main()

    typedef string::const_iterator iter;
    typedef boost::iterator_range<iter> string_view;

    vector<string_view> vsv;
    test_custom(text, delims, vsv);

Visual Studio 说:cannot convert from 'const char *' to 'const std::_String_const_iterator&lt;std::_String_val&lt;std::_Simple_types&lt;char&gt;&gt;&gt;'

您能帮帮我吗,我应该在 Visual Studio 中启用任何选项以使其正常工作吗?

【问题讨论】:

注意:有一个std::string_view在工作中 【参考方案1】:

您似乎正在尝试将char const* 转换为std::string::const_iterator,例如,在将参数传递给创建范围的函数时:虽然std::string::const_iterator 可能是typedefchar const*,但没有要求就是这样。不过,我认为您的代码没有提供足够的上下文来查明确切的问题。您可能想要查找传递字符串文字的位置或获取std::string 部分的地址(即类似于&amp;str[index]&amp;*it 的内容)。

根据您的编辑,我上面的怀疑实际上得到了证实!您需要将您正在使用的char const*s 翻译回std::string::const_iterators,例如,通过添加合适的偏移量:

typename C::value_type(s.begin() + (p - s.c_str()), s.begin() + (q - s.c_str()))

【讨论】:

请在此处查看答案:***.com/questions/5505965/… @SkyRipper:为什么?引用的问题和答案似乎与您的问题无关!不过,应该提供SSCCE! ...而您刚刚完全所做的文章的更新证实了我的猜测:您尝试从char const* 构造std::string::cont_iterator 我照你说的做了 @SkyRipper:不过,您似乎已经落后了:我已经用解决方案更新了答案(尽管我无法轻松编译它以验证我没有打错字; 但从概念上讲,它会起作用)。 请问typename怎么用?

以上是关于c++ boost::iterator_range<iter> string_view 错误的主要内容,如果未能解决你的问题,请参考以下文章

学习C++有啥用途?

C++语法小记---标准库

C++之父的C++元宇宙

[C++]C++入门到入土篇 HelloWorld 解析 && C++入门

怎么找C++函数需要的头文件?(C++头文件C++函数文档C++文档)

如何识别项目是托管 c++ 项目还是非托管 c++ 项目