c ++ boost :: iterator_range & lt; iter & gt; ошибка просмотра строки

Я пытаюсь разбить строку самым быстрым способом в 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

Решение

Кажется, вы пытаетесь преобразовать 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()))
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]