我试图在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<std::_String_val<std::_Simple_types<char>>>'
如果我在visual studio中启用任何选项可以帮助我吗?
答案 0 :(得分:1)
您似乎正在尝试将char const*
转换为std::string::const_iterator
,例如,在将参数传递给创建范围的函数时:尽管std::string::const_iterator
可能是typedef
char const*
并不要求这种情况。但是,我不认为你的代码提供了足够的上下文来指出确切的问题。您可能希望查找传递字符串文字的位置或获取std::string
部分的地址(即&str[index]
或&*it
行的内容。)
基于你的编辑,我怀疑上面确实得到了证实!您需要将正在播放的char const*
翻译回std::string::const_iterator
,例如,添加合适的偏移量:
typename C::value_type(s.begin() + (p - s.c_str()), s.begin() + (q - s.c_str()))