c++;boost::迭代器范围<;iter>;字符串视图错误 我试图用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); } #包括 #包括 #包括 #包括 #包括 使用名称空间std; 大小常数N=10000000; 模板 无效测试\u strpbrk(字符串常量&s、字符常量*delims、C&ret) { C输出; char const*p=s.c_str(); char const*q=strpbrk(p+1,delims); for(;q!=NULL;q=strpbrk(p,delims)) { push_back(typename C::value_type(p,q)); p=q+1; } 输出交换(ret); } int main() { typedef字符串::常量迭代器iter; typedef boost::迭代器\范围字符串\视图; 向量vsv; 测试自定义(文本、delims、vsv); }

c++;boost::迭代器范围<;iter>;字符串视图错误 我试图用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); } #包括 #包括 #包括 #包括 #包括 使用名称空间std; 大小常数N=10000000; 模板 无效测试\u strpbrk(字符串常量&s、字符常量*delims、C&ret) { C输出; char const*p=s.c_str(); char const*q=strpbrk(p+1,delims); for(;q!=NULL;q=strpbrk(p,delims)) { push_back(typename C::value_type(p,q)); p=q+1; } 输出交换(ret); } int main() { typedef字符串::常量迭代器iter; typedef boost::迭代器\范围字符串\视图; 向量vsv; 测试自定义(文本、delims、vsv); },c++,boost,string-view,C++,Boost,String View,VisualStudio说:无法从“const char*”转换为“const std::\u String\u const\u iterator” 您能帮助我吗,我是否应该在visual studio中启用任何选项以使其工作?您似乎正在尝试将字符常量*转换为标准::字符串::常量迭代器,例如。,将参数传递给创建范围的函数时:尽管std::string::const_迭代器可能是typedef的char const*的迭代器,但不要求是这种情况。不过,我认为您的代码没有提供足够的上下文来指出确切

VisualStudio说:
无法从“const char*”转换为“const std::\u String\u const\u iterator”


您能帮助我吗,我是否应该在visual studio中启用任何选项以使其工作?

您似乎正在尝试将
字符常量*
转换为
标准::字符串::常量迭代器
,例如。,将参数传递给创建范围的函数时:尽管
std::string::const_迭代器
可能是
typedef
char const*
的迭代器,但不要求是这种情况。不过,我认为您的代码没有提供足够的上下文来指出确切的问题。您可能希望查找传递字符串文字或获取
std::string
部分地址的位置(即沿着
&str[index]
&it

根据你的编辑,我上面怀疑的事实得到了证实!您需要将正在播放的
char-const*
s转换回
std::string::const\u迭代器,例如,通过添加适当的偏移量:

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

请看这里的答案:@SkyRipper:为什么?参考的问题和答案似乎与您的问题无关!但是,您应该提供一个。。。您刚刚对文章的更新完全证实了我的猜测:您试图从
char const*
构造
std::string::cont\u迭代器
!我照你说的做了me@SkyRipper:不过,你似乎落后了:我已经用解决方案更新了答案(虽然我无法轻松编译它以验证我没有输入错误;但从概念上讲,它会起作用)。请如何使用typename?注意:在工作中有一个
std::string\u视图